3

我正在与尝试使用 JMS 队列和 IBM Websphere MQ 实现负载平衡行为的人合作。因此,他们将多个 Camel JMS 消费者配置为从同一个队列中读取。尽管根据 JMS 规范(我最后一次查看),这种行为是未定义的,但他们期望一种循环/负载平衡行为。而且,虽然规范没有定义这一点,但我相信 Websphere MQ 的正常行为是只将消息传递给一个消费者,并且它可能会执行某种类型的负载平衡。参见这里,例如:当多个 MessageConsumer 连接到同一个队列(Websphere MQ)时,如何对消息消费者进行负载平衡?

但在这种特殊情况下,似乎两个消费者都收到了相同的消息。

任何更熟悉 Websphere MQ 专家的人都可以对此有所了解吗?是否存在预期这种行为的任何情况?是否有任何配置更改可以缓解这种情况?

我倾向于告诉这里的每个人都使用本地 Websphere MQ 集群设施,并且不要让多个消费者指向同一个队列,但这对他们来说将是一个很大的变化,所以我很想找到一种方法来制作这项工作。

并不是说我喜欢依赖任何未定义的东西,但是如果他们愿意依赖 IBM 的特定行为,我将把它留给他们。

4

1 回答 1

3

他们接收相同消息的唯一方法是:

  1. 消息有多个副本。
  2. 这些应用程序在没有锁定的情况下浏览消息,然后转回来将其删除。
  3. 应用程序正在退出交易并使消息再次可用。
  4. 在应用程序确认消息之前断开连接。

推荐的做法是让多个应用程序竞争队列中的消息。如果一个应用程序出现故障,仍会为队列提供服务。在集群中,这至关重要,因为集群将继续将消息引导到未提供服务的队列实例,直到它填满。

如果它是一个开发系统,安装SupportPac MA0W并告诉它只跟踪一个队列,您将能够准确地看到正在发生的事情。

请参阅第 4.4 节中的 JMS 规范。提供者绝不能提供已确认消息的第二个副本。4.4.13 中的会话处理例外,我在上面的#4 中介绍过。这是非常明确的,并且是官方规范的一部分,因此不是 IBM 特定的行为。

于 2013-04-17T21:52:25.290 回答