2013-04-17 33 views
3

我正在与尝试使用IBM Websphere MQ中的JMS队列实现负载平衡行为的人一起工作。因此,他们将多个Camel JMS使用者配置为从同一个队列读取数据。尽管根据JMS规范(我上次无论如何看)这种行为是未定义的,但他们期望一种循环/负载平衡行为。而且,虽然规范没有定义,但我认为Websphere MQ的正常行为是仅向其中一个消费者传递消息,并且它可能会执行某种类型的负载平衡。请看这里,例如:When multi MessageConsumer connect to same queue(Websphere MQ),how to load balance message-consumer?同一Websphere MQ JMS队列上的两个消费者都收到相同的消息

但是在这种特殊情况下,看起来都是消费者正在接收相同的消息。

任何更擅长Websphere MQ的人都会对此有所了解吗?有什么情况会出现这种行为?是否有任何配置更改可以缓解此问题?

我倾向于告诉每个人在这里使用本地Websphere MQ集群设施,并避免让多个消费者指向相同的队列,但这对他们来说将是一个重大改变,所以我很想发现一种方法来完成这项工作。

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

回答

3

为他们两个的唯一途径收到相同的消息是:

  1. 有消息的多个副本。
  2. 应用程序正在浏览消息而没有锁定,然后盘旋回来删除它。
  3. 应用程序正在撤销一项交易并再次提供该消息。
  4. 连接在应用程序确认消息之前被切断。

有多个应用竞争队列中的消息是一种推荐的做法。如果有一个应用程序关闭,队列仍然处于服务状态在群集中,这是至关重要的,因为群集将继续将消息引导到未提供服务的队列实例,直到满足为止。

如果是开发系统,请安装SupportPac MA0W并告诉它只跟踪一个队列,并且您将能够看到到底发生了什么。

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

+0

Thanks T.Rob。多年来我没有看过实际的规范,但我曾经想过,当队列中有多个消费者(而不是一个主题)时,行为完全未定义。但是也许“从来没有提供确认消息的第二个副本”规定胜过了这一点。 – mindcrime

+0

这是未定义的竞争消费者之间的投递顺序。消息的传递也受到QOS设置的影响。如果应用程序指定了懒惰确认,那么它可能会受骗。但是,如果邮件排队等待并且未回滚或发生异常,那么您只能进行一次和一次交付。 –

相关问题