为多个主机创建 JMS/MQ 模板和侦听器

问题描述

我有一个连接到多个 MQ 主机的 Java Spring/Boot 应用程序。我正在使用 jmstemplate 发送消息,并且我正在尝试配置 JmsListeners 以接收消息。我有两个不同的问题。

为了发送消息,我想给 jmstemplate 主机列表,并让它使用标准故障转移 - 使用第一个,如果它关闭,切换到第二个等等。我遇到的问题是一旦发生故障转移,似乎不会尝试恢复到列表中的第一个主机。如何让应用程序检查第一台主机是否重新上线?

为了接收消息,我想为每个唯一的主机/返回队列组合创建一个侦听器,并使所有侦听器同时处于活动状态。主机和队列名称数量是可变的。我可能只需要一个队列,但我需要多台主机(我已经看到了 2 台主机的解决方案,但我需要“n”)。我能够使用 JmsListenerEndpointRegistrar 创建和注册侦听器。问题是,似乎在幕后,侦听器正在使用我用于发送消息的 jmstemplate,并且它正在使用故障转移行为 - 只有与第一台主机关联的侦听器处于活动状态,直到该主机出现故障,然后与第二个主机关联的侦听器变为活动状态,等等。如何让所有侦听器同时处于活动状态?如果我可以将侦听器绑定到特定的 jmstemplate,我想我可以做到这一点,但我不知道如何做到这一点。

解决方法

恕我直言,最好的办法是拥有一个 CCDT 并将 ibm.mq.ccdtUrl 中的 application.properties 设置为指向 CCDT。

请参阅 mq-jms-spring-boot-starter 的 GitHub 存储库主页以获取所有配置属性的列表 - https://github.com/ibm-messaging/mq-jms-spring

通过使用 CCDT,您可以让底层 MQ Java 客户端代码执行故障转移。