0

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

  • 我有一个有多个消费者的队列
  • 一条消息被发送到队列 - 一个“登录”消息
  • 其中一位消费者处理消息

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

  • 处理消息的消费者向每个人都听的主题发送一条消息,告诉他们“用户 x 成功登录”。让我们称之为成功。

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

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

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

任何帮助将不胜感激!

4

1 回答 1

2

是对的吗?

不幸的是,是的。

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

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

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

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

于 2012-11-27T09:14:03.787 回答