【问题标题】:Detecting disconnect using mq-jms-spring from IBM使用 IBM 的 mq-jms-spring 检测断开连接
【发布时间】:2021-08-04 22:44:32
【问题描述】:

我正在尝试为使用 IBM JMS 集成代码 ibm-messaging/mq-jms-spring 连接到 MQ 的 JMS 连接编写运行状况检查。我需要检测到 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 ibm-mq spring-jms


    【解决方案1】:

    从严格的 JMS 角度来看,当调用 ExceptionListeneronException 方法时,由您的应用程序使用 ConnectionFactory.createConnection 重新建立 JMS 连接。这是一个阻塞调用,所以一旦它成功返回,你就知道连接已经重新建立了。

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

    【讨论】:

    • 用代码更新您的问题 - 不要在 cmets 中发布。
    • 我不明白它希望我如何尝试重新连接。
    • 不希望您尝试重新连接,因为您已将 JMS 连接管理委托给 Spring,因此您不再拥有使用直接 JMS 时的控制级别。 Spring 在许多场景中都很有用,但它会从您的应用程序中移除细粒度控制,因此它在某些用例中也可能会受到限制。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2021-01-24
      • 2019-06-16
      • 2020-09-29
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2011-11-28
      相关资源
      最近更新 更多