【问题标题】:Two consumers on same Websphere MQ JMS Queue, both receiving same message同一个 Websphere MQ JMS 队列上的两个消费者,都接收相同的消息
【发布时间】:2013-04-10 19:32:16
【问题描述】:

我正在与尝试使用 JMS 队列和 IBM Websphere MQ 实现负载平衡行为的人合作。因此,他们将多个 Camel JMS 消费者配置为从同一个队列中读取。尽管根据 JMS 规范(我最后一次查看),这种行为是未定义的,但他们期望一种循环/负载平衡行为。而且,虽然规范未定​​义这一点,但我相信 Websphere MQ 的正常行为是仅将消息传递给其中一个消费者,并且它可能执行某种类型的负载-平衡。见这里,例如:When multi MessageConsumer connect to same queue(Websphere MQ),how to load balance message-consumer?

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

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

我倾向于告诉这里的每个人都使用本机 Websphere MQ 集群工具,不要让多个消费者指向同一个队列,但这对他们来说将是一个很大的变化,所以我很想发现一个实现这项工作的方法。

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 邮件有多个副本。
    2. 应用程序正在浏览未锁定的消息,然后循环返回以将其删除。
    3. 应用程序正在退出事务并使消息再次可用。
    4. 在应用确认消息之前连接已断开。

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

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

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

    【讨论】:

    • 谢谢 T.Rob。多年来我没有看过实际的规范,但我认为当队列中有多个消费者(而不是主题)时,行为是完全未定义的。但也许“从不提供已确认消息的第二份副本”条款胜过这一点。
    • 未定义的是竞争消费者之间的交货顺序。消息的传递也受 QOS 设置的影响。如果应用程序指定延迟确认,那么它可能会被骗。但是,如果消息已排队并已确认且未回滚或出现异常,则您将获得一次且仅一次的传递。
    猜你喜欢
    • 2012-07-14
    • 2020-03-17
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多