使用 IBM 的 mq-jms-spring 检测断开连接
Detecting disconnect using mq-jms-spring from IBM
我正在尝试为使用 IBM JMS 集成代码连接到 MQ 的 JMS 连接编写运行状况检查 ibm-messaging/mq-jms-spring。我需要检测到与 MQ 的连接已丢失。我挂接了 DefaultJmsListenerContainerFactory 的 exceptionListener,当我失去与 MQ 的连接时它会告诉我,但我在 JMS 堆栈中找不到任何东西告诉我连接何时被(重新)建立。
调用ExceptionListener的代码
@Override
protected void establishSharedConnection() {
try {
super.establishSharedConnection();
}
catch (Exception ex) {
if (ex instanceof JMSException) {
invokeExceptionListener((JMSException) ex);
}
logger.debug("Could not establish shared JMS Connection - " +
"leaving it up to asynchronous invokers to establish a Connection as soon as possible", ex);
}
}
从严格的 JMS 角度来看,当调用 ExceptionListener
的 onException
方法时,由您的应用程序使用 ConnectionFactory.createConnection
重新建立 JMS 连接。这是一个阻塞调用,所以一旦它 returns 成功,你就知道连接已经重新建立。
如果您将 JMS 连接管理委派给 Spring,则您不太可能获知 JMS 连接何时重新建立。我在 Spring JMS 中没有看到任何钩子。
我上周观察到的一件事是,如果 MQ 被编码或配置为使用重新连接功能,那么在进行重新连接时,ExceptionListener 会收到来自队列管理器的消息。
我正在尝试为使用 IBM JMS 集成代码连接到 MQ 的 JMS 连接编写运行状况检查 ibm-messaging/mq-jms-spring。我需要检测到与 MQ 的连接已丢失。我挂接了 DefaultJmsListenerContainerFactory 的 exceptionListener,当我失去与 MQ 的连接时它会告诉我,但我在 JMS 堆栈中找不到任何东西告诉我连接何时被(重新)建立。
调用ExceptionListener的代码
@Override
protected void establishSharedConnection() {
try {
super.establishSharedConnection();
}
catch (Exception ex) {
if (ex instanceof JMSException) {
invokeExceptionListener((JMSException) ex);
}
logger.debug("Could not establish shared JMS Connection - " +
"leaving it up to asynchronous invokers to establish a Connection as soon as possible", ex);
}
}
从严格的 JMS 角度来看,当调用 ExceptionListener
的 onException
方法时,由您的应用程序使用 ConnectionFactory.createConnection
重新建立 JMS 连接。这是一个阻塞调用,所以一旦它 returns 成功,你就知道连接已经重新建立。
如果您将 JMS 连接管理委派给 Spring,则您不太可能获知 JMS 连接何时重新建立。我在 Spring JMS 中没有看到任何钩子。
我上周观察到的一件事是,如果 MQ 被编码或配置为使用重新连接功能,那么在进行重新连接时,ExceptionListener 会收到来自队列管理器的消息。