我正在与使用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特定的行为,我会把它留给他们。
答案 0 :(得分:3)
他们接收相同消息的唯一方法是:
建议使用多个应用竞争队列中的消息。如果一个应用程序停止运行,则仍会提供队列。在群集中,这是至关重要的,因为群集将继续将消息定向到未提供服务的队列实例,直到它填满为止。
如果是Dev系统,请安装SupportPac MA0W并告诉它只跟踪那个队列,你就能看到到底发生了什么。
请参阅第4.4节中的JMS规范。提供者绝不能提供已确认消息的第二个副本。 4.4.13中的会话处理是例外的,我在上面的#4中介绍了它。这非常明确,是官方规范的一部分,因此不是IBM特有的行为。