JMS工作流 - 混合队列和主题

时间:2012-11-27 01:02:20

标签: jms activemq

我对如何使用JMS有疑问。这是我的情况:

  • 我有一个包含多个消费者的队列
  • 消息被发送到队列 - f.e。 “登录”消息
  • 其中一位消费者处理消息

现在我想告诉我所有的系统“登录”消息 - 即用户成功登录。我目前正在做的是:

  • 处理邮件的使用者向主题发送消息,每个人都在监听“用户x成功登录”。我们称之为成功。

现在,由于SUCCESS消息,每个相关系统都知道“用户x已成功登录”。这就是我想要的。

但是,如果我理解JMS消息传递规则是正确的,理论上可能是另一个主题/队列的消息依赖于接收消费者知道“用户x登录”的事实可能在我的SUCCESS消息之前到达已收到。即使它是在Session.send()调用SUCCESS消息之后发送的。是吗?

如果是这样,您应该如何使用JMS实现这样的情况?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

  

是吗?

不幸的是,是的。

  

如果是这样,您应该如何使用JMS实现这样的情况?

我想到了两种不同的方法:

  • 模拟其他网络协议 - 添加每个系统在收到SUCCESS消息时必须发送的ACKNOWLEDGE消息。 ACKNOWLEDGE消息将被发送到某个专用主题,并且依赖于接收消费者知道用户x登录的事实的消息在ACKNOWLEDGE消息从该消费者到达之前无法发送。

  • 在同一主题上发送SUCCESS和其他消息(如果适用;其他消费者可以忽略其他消息,如果它们不是最终目的地),并为SUCCESS消息提供更高的优先级。这应该(至少在理论上--JMS API不需要这个!)保证SUCCESS消息在依赖于接收消费者知道用户x登录的消息之前到达。在这种情况下您应该感兴趣的方法是{ {3}}