Java CachingConnectionFactory、JMSTemplate和MQJMS2019
我开发了一个高度并发的应用程序,其中15个自动化作业需要每10分钟连接到15个不同的WebSphereMQ(每个作业一个)。我正在使用Java CachingConnectionFactory、JMSTemplate和MQJMS2019,java,ibm-mq,spring-jms,Java,Ibm Mq,Spring Jms,我开发了一个高度并发的应用程序,其中15个自动化作业需要每10分钟连接到15个不同的WebSphereMQ(每个作业一个)。我正在使用CCF和JMSTemplate来获得更好的性能和缓存优势。我知道,CachingConnectionFactory类还有另一个重要的优点,它可以自动设置recovernconnexception=true,但无论何时重新启动WMQ服务器,由于缓存连接已断开并产生错误MQJMS2009,应用程序在启动后无法重新建立与它的连接。我想知道,根据Spring JavaDo
CCF
和JMSTemplate
来获得更好的性能和缓存优势。我知道,CachingConnectionFactory
类还有另一个重要的优点,它可以自动设置recovernconnexception=true
,但无论何时重新启动WMQ服务器,由于缓存连接已断开并产生错误MQJMS2009,应用程序在启动后无法重新建立与它的连接。我想知道,根据Spring JavaDoc,是否有一种明确的方法来重新建立与CCF
的连接,如果设置了Reconnexception,那么JMS ExceptionListener将在基础连接上注册,当ExceptionListener捕捉到异常时,它将重置连接。连接将在下次访问时续订
CachingConnectionFactory类有一个resetConnection()方法,它为您提供了一种根据问题重置连接的显式方法
但是,正如Umamahesh在他的评论中提到的,您可能希望研究WebSphereMQ本身提供的自动客户端重新连接功能。此功能将尝试捕获连接错误并透明地重新连接到队列管理器,而不会向Spring层抛出异常。它最常用于HA环境(与连接名称列表或CCDT中的队列管理器列表结合使用),但也适用于单个队列管理器的异常终止
测试这一点的最简单方法是使用以下方法在连接工厂上启用自动重新连接:
ConnectionFactory.setClientReconnectOptions( WMQConstants.WMQ_CLIENT_RECONNECT );
您可以在此处阅读有关在JMS中使用客户端重新连接的更多信息:
如果您决定使用自动重新连接,那么应该注意透明重新连接的一些后果——特别是如果您是:在事务控制下传递消息;浏览队列;或者使用临时动态队列。这些后果详细记录在本主题的“恢复自动重新连接的客户端”一节中:
请注意,MQ的自动重新连接功能设计为在队列管理器发生故障(或计划的切换)时工作,因此要对其进行测试,您需要使用“endmqm-r”结束队列管理器,或者通过终止队列管理器/通道(amqrmppa)模拟故障进程。您可以检查此技术说明中的不同重新连接选项吗。