首页 文章

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

提问于
浏览
3

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

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

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

我倾向于告诉大家这里使用原生的Websphere MQ集群设施,并让多个消费者指向同一个队列,但这对他们来说将是一个很大的改变,所以我很想找到一种方法来制作这项工作 .

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

1 回答

  • 3

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

    • 邮件有多个副本 .

    • 应用程序正在浏览邮件而没有锁定,然后回过头来删除它 .

    • 应用程序正在退出事务并再次使消息可用 .

    • 在应用确认消息之前,连接已断开 .

    建议的做法是让多个应用程序竞争队列中的消息 . 如果一个应用程序停止运行,则仍会提供队列 . 在群集中,这是至关重要的,因为群集将继续将消息定向到未提供服务的队列实例,直到它填满为止 .

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

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

相关问题