使用 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 角度来看,当调用 ExceptionListeneronException 方法时,由您的应用程序使用 ConnectionFactory.createConnection 重新建立 JMS 连接。这是一个阻塞调用,所以一旦它 returns 成功,你就知道连接已经重新建立。

如果您将 JMS 连接管理委派给 Spring,则您不太可能获知 JMS 连接何时重新建立。我在 Spring JMS 中没有看到任何钩子。

我上周观察到的一件事是,如果 MQ 被编码或配置为使用重新连接功能,那么在进行重新连接时,ExceptionListener 会收到来自队列管理器的消息。