【问题标题】:Correct stop java application with IBM mq使用 IBM mq 正确停止 Java 应用程序
【发布时间】:2015-08-04 08:04:30
【问题描述】:

我在 IBM mq websphere 中使用 java 应用程序。当我在 mq 中杀死应用程序时,仍然会保留一些有关频道的信息。我不知道如何纠正应用程序的停止。

简单地说,我需要使用 mq 通道杀死应用程序。因为当我重新启动应用程序时,它无法启动并抛出异常:

ERROR Failed to initialize Queue Channel.
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'TL4UZ8T' with connection mode '1' and host name 'mq4u-TL4UZ8T.lb.com(64424)'.

感谢您的帮助!

【问题讨论】:

    标签: java ibm-mq


    【解决方案1】:

    男孩!为什么你必须杀死应用程序?你的意思是申请异常终止吗?

    应用程序必须调用 Disconnect() 来通知队列管理器清理它的结束。这是一个最佳实践,请阅读其他最佳实践here。如果未调用 Disconnect,队列管理器不会立即清理为客户端连接分配的资源。

    因此,请检查您的应用程序代码并确保它具有关闭所有打开的队列/主题/连接的代码。

    【讨论】:

      【解决方案2】:

      要扩展 Shashi 的出色答案,您可以在此处考虑很多事情。例如:

      • 在终止应用程序之前 停止频道。即使您有几十个正在运行的通道实例,您也可以停止与该特定 IP 地址关联的那些。使用 MODE(INACTIVE) 以便应用可以重新连接。
      • 在终止应用程序后 停止频道。和以前一样,您可以停止与该特定 IP 地址关联的那些。
      • 指示应用程序接受队列上的关闭命令,然后正常关闭自身。
      • 禁用应用程序的队列。当应用程序没有很好地检测时,它可能会认为禁用其队列是致命的,并会在您这样做时自行关闭。
      • 调整通道的HBINTSHARECONVKEEPALIVE等参数,使通道有大量的备用实例,并及时关闭孤立实例。这可能还包括增加听众积压。
      • 让应用程序接受SIGHUP 或其他系统信号以正常关闭自身。

      正如 Shashi 所指出的,最好的选择是应用程序将关闭的愿望传达给 QMgr,然后两者合作完成该任务。该应用程序旨在与 MQ 在每个其他任务上合作,那么为什么不这样做呢?

      但是,如果这不是一个选项,请使用 MQ 内置的工具来尽可能接近所需的结果。

      如果做不到这一点,请使用操作系统内置的工具,但调整 MQ 以将影响降至最低。

      【讨论】:

        猜你喜欢
        • 2021-08-17
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多