同一Websphere MQ JMS Queue上的两个使用者,都接收相同的消息

时间:2013-04-17 21:01:08

标签: jms load-balancing messaging ibm-mq mq

我正在与使用JMS Queues和IBM Websphere MQ实现负载平衡行为的人合作。因此,他们将多个Camel JMS使用者配置为从同一个队列中读取。尽管根据JMS规范(我上次无论如何看)这种行为是未定义的,但他们期望有一种循环/负载平衡行为。而且,虽然规范留下了这个未定义的,但我还是相信Websphere MQ的正常行为是将消息传递给只有一个消费者,并且它可能做某种类型的负载-balancing。请参阅此处,例如:When multi MessageConsumer connect to same queue(Websphere MQ),how to load balance message-consumer?

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

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

我倾向于告诉大家这里使用原生的Websphere MQ集群设施,而不是让多个消费者指向同一个队列,但这对他们来说将是一个很大的变化,所以我很想发现一个这项工作的方式。

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

1 个答案:

答案 0 :(得分:3)

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

  1. 该邮件有多个副本。
  2. 应用程序正在浏览邮件而没有锁定,然后回过头来删除它。
  3. 应用程序正在退出交易并再次显示该消息。
  4. 在应用确认消息之前,连接已断开。
  5. 建议使用多个应用竞争队列中的消息。如果一个应用程序停止运行,则仍会提供队列。在群集中,这是至关重要的,因为群集将继续将消息定向到未提供服务的队列实例,直到它填满为止。

    如果是Dev系统,请安装SupportPac MA0W并告诉它只跟踪那个队列,你就能看到到底发生了什么。

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