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



我有一个关于如何使用JMS的问题。这是我的案例:

  • 我有一个包含多个消费者的队列
  • 一条消息被发送到队列,例如"登录"消息
  • 其中一个使用者处理消息

现在我想告诉我的所有系统关于"登录"消息,即用户成功登录。我目前正在做的是:

  • 处理消息的消费者会向Topic发送一条消息,每个人都会在其中收听,告诉他们"用户x成功登录"。让我们称之为SUCCESS

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

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

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

如有任何帮助,我们将不胜感激!

是这样吗?

很遗憾,是的。

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

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

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

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

最新更新