Ibm mq SVRCONN通道上的WebSphere MQ DISC与KAINT

Ibm mq SVRCONN通道上的WebSphere MQ DISC与KAINT,ibm-mq,channel,keep-alive,Ibm Mq,Channel,Keep Alive,我们的许多应用程序与队列管理器建立不正确的连接(SVRCONN),并且在不需要连接时不发出MQDISC,这是一个主要问题。这会导致大量闲置的陈旧连接,并阻止应用程序建立新连接,并导致连接中断(2009)错误而失败。在7.0.1.8版的Windows MQ中,我们一直限制使用clientidle参数的应用程序连接,但当我们在Linux平台上迁移到MQ v7.5.0.2时,我们正在决定新版本中可用的最佳选项。我们在v7.5的ini文件中不再有clientidle,但在SVRCONN通道中有DISCI

我们的许多应用程序与队列管理器建立不正确的连接(SVRCONN),并且在不需要连接时不发出MQDISC,这是一个主要问题。这会导致大量闲置的陈旧连接,并阻止应用程序建立新连接,并导致连接中断(2009)错误而失败。在7.0.1.8版的Windows MQ中,我们一直限制使用clientidle参数的应用程序连接,但当我们在Linux平台上迁移到MQ v7.5.0.2时,我们正在决定新版本中可用的最佳选项。我们在v7.5的ini文件中不再有clientidle,但在SVRCONN通道中有DISCINT&KAINT。对于我们的应用程序通过SVRCONN通道建立连接并保持连接打开而不发出断开连接的场景,我已经讨论了这两种方法的优缺点。以上哪个通道属性对我们来说是理想的。有什么建议吗?其中任何一个优先于另一个吗

首先,
KAINT
控制TCP函数,而不是MQ函数。这意味着要使其生效,必须在
qm.ini
TCP节中启用TCP
Keepalive
功能。这没什么错,但是本机的
HBINT
DISCINT
比委托TCP响应更快。这解决了操作系统无法识别套接字的远程伙伴已离开并清理套接字的问题。只要套接字存在并且MQ的通道空闲,MQ就不会注意到。当TCP清理套接字时,MQ的异常回调例程会立即看到它并关闭通道

在剩下的两个套接字中,
DISCINT
控制MQ终止空闲但活动的套接字的时间间隔,而
HBINT
控制MQ关闭连接到孤立套接字的MCA的时间间隔。理想情况下,您将拥有一个现代化的MQ客户机和服务器,因此您可以同时使用这两个

如果您希望频道在生产班次期间保持正常,则
DISCINT
的值应大于消息之间的最长预期间隔。因此,如果一个通道设计为至少每5分钟有一次消息流量,则需要超过5分钟的
DISCINT
来避免通道重新启动时间

HBINT
实际上会在通道上传递一个小的心跳消息,但只有在
HBINT
秒过去而没有消息时才会这样做。Thsi捕捉到套接字已死机但TCP尚未清理的情况
HBINT
允许MQ在操作系统之前发现并处理它,包括拆下套接字

通常,
HBINT
的值过低会导致大量不必要的流量。例如,
HBINT(5)
将每隔五秒钟传输一次心跳信号,在此期间不会传递其他通道流量。很可能,您不需要在丢失套接字的5秒内终止孤立通道,因此较大的值可能更有用。这就是说,
HBINT(5)
将在一个持续消息速率为1/秒的系统中导致零额外流量,直到应用程序死机,在这种情况下,孤立套接字将很快被杀死


有关更多详细信息,请访问并查找Morag的“保持频道运行”演示文稿。

回答得很好。我要补充的唯一一件事是,尽管ini文件中不再有ClientIle,但是SVRCONN上的DISCINT是完全相同的函数,但现在是基于每个通道配置的,因此如果您想要的正是以前的设置,这是等效的设置。