我必须在打开队列之前检查IBM MQ队列管理器状态。 我必须通过检查QMgr是否处于活动状态来创建请求者应用程序,然后调用put msg或从MQ获取消息 是否可以检查状态,
请分享一些代码段。
由于
答案 0 :(得分:1)
您不应该在打开队列之前检查QMgr。当我今天回复a similar question时,提出的设计是一个非常非常糟糕的设计。其结果是将异步消息传递回同步消息传递。这将消息生成器耦合到消费者,引入位置和解决方案依赖性,打破群集,破坏WMQ的负载分配和平衡,将网络拓扑嵌入到应用程序中,并使整个系统变得脆弱。在故意击败除实际队列/出队操作之外的所有最佳功能之后,请不要责怪WMQ没有正常工作。
如果您的请求者应用程序正在检查QMgr是否处于活动状态,那么使用多实例连接名称以及可以访问群集的两个或更多功能相当的QMgrs层,您可以更好地 。只要其中一个QMgrs启动,应用程序就会在它们之间循环,直到找到要连接的那个。
如果您的响应程序应用程序正在检查QMgr是否处于活动状态,那么只需尝试连接就可以更好地 。响应者应用永远不会故障转移到另一个QMgr,因为这样做会破坏事务性并且可能会使队列不受管理。相反,只需确保每个队列至少有两个来自本地响应应用程序的输入句柄,这些应用程序不会在QMgrs上进行故障转移。 (如果QMgr本身使用硬件集群或多实例QMgr进行故障转移,则可以。)
如果目的是在将消息放入队列之前检查队列上是否有打开的输入句柄,那么更好的设计是让请求的应用程序不关心消息被路由到哪个队列实例,而是使用检测内置到WMQ中以重新启动丢失其输入句柄的响应程序应用程序,或者在没有任何内容正在侦听时禁用该队列。