使用 IBM mq 正确停止 java 应用程序
Correct stop java application with IBM mq
我将 java 应用程序与 IBM mq websphere 一起使用。当我杀死 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)'.
感谢您的帮助!
小伙子!为什么你必须杀死应用程序?你的意思是应用程序异常终止?
应用程序必须调用 Disconnect() 来通知队列管理器清理它的结束。这是一个最佳实践,请阅读其他最佳实践 here。如果未调用 Disconnect,队列管理器不会立即清除为客户端连接分配的资源。
因此请检查您的应用程序代码并确保它具有关闭任何 queues/topics/connections 打开的代码。
为了扩展 Shashi 的出色回答,您可以在此处考虑很多事情。例如:
- 在 终止应用程序之前停止频道。即使您有数十个 运行 频道实例,您也可以停止与该特定 IP 地址关联的频道实例。使用
MODE(INACTIVE)
以便应用可以重新连接。
- 在 终止应用程序后停止频道。和以前一样,您可以停止与该特定 IP 地址关联的那些。
- 检测应用程序以接受队列中的关闭命令,然后自行关闭。
- 禁用应用程序的队列。当一个应用程序没有很好地检测时,它很可能认为禁用它的队列是致命的,并且会在您这样做时自行关闭。
- 调整通道的
HBINT
、SHARECONV
、KEEPALIVE
等参数,使通道有大量空闲实例,及时关闭孤立实例。这可能还包括增加听众积压。
- 检测应用程序以接受
SIGHUP
或其他系统信号以正常关闭自身。
正如 Shashi 指出的那样,最好的选择是应用程序将其关闭的愿望传达给 QMgr,然后两者合作完成该任务。该应用程序旨在与 MQ 合作处理每个 其他 任务,那么为什么不是这个呢?
但是,如果这不是一个选项,请使用 MQ 中内置的工具来尽可能接近所需的结果。
否则,请使用 OS 中内置的工具,但调整 MQ 以将影响降至最低。
我将 java 应用程序与 IBM mq websphere 一起使用。当我杀死 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)'.
感谢您的帮助!
小伙子!为什么你必须杀死应用程序?你的意思是应用程序异常终止?
应用程序必须调用 Disconnect() 来通知队列管理器清理它的结束。这是一个最佳实践,请阅读其他最佳实践 here。如果未调用 Disconnect,队列管理器不会立即清除为客户端连接分配的资源。
因此请检查您的应用程序代码并确保它具有关闭任何 queues/topics/connections 打开的代码。
为了扩展 Shashi 的出色回答,您可以在此处考虑很多事情。例如:
- 在 终止应用程序之前停止频道。即使您有数十个 运行 频道实例,您也可以停止与该特定 IP 地址关联的频道实例。使用
MODE(INACTIVE)
以便应用可以重新连接。 - 在 终止应用程序后停止频道。和以前一样,您可以停止与该特定 IP 地址关联的那些。
- 检测应用程序以接受队列中的关闭命令,然后自行关闭。
- 禁用应用程序的队列。当一个应用程序没有很好地检测时,它很可能认为禁用它的队列是致命的,并且会在您这样做时自行关闭。
- 调整通道的
HBINT
、SHARECONV
、KEEPALIVE
等参数,使通道有大量空闲实例,及时关闭孤立实例。这可能还包括增加听众积压。 - 检测应用程序以接受
SIGHUP
或其他系统信号以正常关闭自身。
正如 Shashi 指出的那样,最好的选择是应用程序将其关闭的愿望传达给 QMgr,然后两者合作完成该任务。该应用程序旨在与 MQ 合作处理每个 其他 任务,那么为什么不是这个呢?
但是,如果这不是一个选项,请使用 MQ 中内置的工具来尽可能接近所需的结果。
否则,请使用 OS 中内置的工具,但调整 MQ 以将影响降至最低。