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

JMS工作流-混合队列和主题,jms,activemq,Jms,Activemq,我有一个关于JMS应该如何使用的问题。这是我的情况: 我有一个包含多个消费者的队列 消息被发送到队列-即“登录”消息 其中一个使用者处理该消息 现在,我想告诉我的所有系统关于“登录”消息,即用户成功登录。我目前正在做的是: 处理消息的消费者向每个人都在听的主题发送消息,告诉他们“用户x成功登录”。让我们称之为成功 现在,由于成功消息,每个相关系统都知道“用户x已成功登录”。这就是我想要的 但是,如果我正确理解JMS消息传递规则,那么从理论上讲,发送到另一个主题/队列的消息可能会在接收到成

我有一个关于JMS应该如何使用的问题。这是我的情况:

  • 我有一个包含多个消费者的队列
  • 消息被发送到队列-即“登录”消息
  • 其中一个使用者处理该消息
现在,我想告诉我的所有系统关于“登录”消息,即用户成功登录。我目前正在做的是:

  • 处理消息的消费者向每个人都在听的主题发送消息,告诉他们“用户x成功登录”。让我们称之为成功
现在,由于成功消息,每个相关系统都知道“用户x已成功登录”。这就是我想要的

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

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

任何帮助都将不胜感激

是这样吗

不幸的是,是的

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

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

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

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


非常感谢您的回答。我很害怕,不客气!第一个选项并不难实现,它可以保证在用户意识到用户已登录之前,不会有任何用户收到进一步的消息。第二个选项风险更大,例如,较旧版本中的OpenMQ不关心
setJMSPriority