我对如何使用JMS有疑问。这是我的情况:
现在我想告诉我所有的系统“登录”消息 - 即用户成功登录。我目前正在做的是:
现在,由于SUCCESS消息,每个相关系统都知道“用户x已成功登录”。这就是我想要的。
但是,如果我理解JMS消息传递规则是正确的,理论上可能是另一个主题/队列的消息依赖于接收消费者知道“用户x登录”的事实可能在我的SUCCESS消息之前到达已收到。即使它是在Session.send()调用SUCCESS消息之后发送的。是吗?
如果是这样,您应该如何使用JMS实现这样的情况?
非常感谢任何帮助!
答案 0 :(得分:2)
是吗?
不幸的是,是的。
如果是这样,您应该如何使用JMS实现这样的情况?
我想到了两种不同的方法:
模拟其他网络协议 - 添加每个系统在收到SUCCESS消息时必须发送的ACKNOWLEDGE消息。 ACKNOWLEDGE消息将被发送到某个专用主题,并且依赖于接收消费者知道用户x登录的事实的消息在ACKNOWLEDGE消息从该消费者到达之前无法发送。
在同一主题上发送SUCCESS和其他消息(如果适用;其他消费者可以忽略其他消息,如果它们不是最终目的地),并为SUCCESS消息提供更高的优先级。这应该(至少在理论上--JMS API不需要这个!)保证SUCCESS消息在依赖于接收消费者知道用户x登录的消息之前到达。在这种情况下您应该感兴趣的方法是{ {3}}