我们目前正在构建一个需要与一些 IBM WebSphere 队列通信的应用程序。在队列的另一端有另一个世界。由于一些未知的情况(对我来说),每次连接到 MQQueueManager 需要 17 秒,但是之后通过队列发送和接收消息并不是一项耗时的工作。因为我们现在在 WebSphere 前面放置了一个 Web 服务,所以我们想出了装饰和缓存 MQQueueManager 和 MQQueue 的想法,并在每次发送消息之前验证它们是否连接,分别打开;如果没有,我们尝试连接到 MQQueueManager,分别打开 MQQueue(再一次,连接到 MQQueueManager 需要 17 秒,打开 MQQueue 是“即时”的)。因此,我们期望 WebSphere 每隔一段时间就会断开 MQQueueManager(我无法确定,因为我们目前无法对此进行大量测试,但我们应该谨慎),并且不幸的调用程序将等待 17 秒重新连接。就目前的情况来看,我们无法预测这件事会发生。我们当前的实现使用 .NET 的 WebSphere MQ 类。当 MQQueueManager 断开连接或相关队列关闭时,我们是否有可能收到回调通知?网。当 MQQueueManager 断开连接或相关队列关闭时,我们是否有可能收到回调通知?网。当 MQQueueManager 断开连接或相关队列关闭时,我们是否有可能收到回调通知?
问问题
1740 次
1 回答
1
是的!如果您使用最新的 WMQ .Net 类和最新的IA9H SupportPac,您将获得一个异步回调方法。(这带有 .Net 示例代码,展示了如何注册和使用回调。)据我了解,此方法将在回调例程可用时向您的回调例程传递一条消息,或者如果连接正常,则将异常传递给注册的异常侦听器丢失或队列设置为GET(DISABLED)
。
在此处获取最新的 WMQ 客户端。查找名称如 MQC* 的 SupportPacs。v8.0 客户端为 MQC8,v9 客户端为 MQC9 等。
如果您有旧版本的 .Net WMQ 类并且由于某种原因无法升级,您可以始终保持单独的线程打开并定期轮询队列。不过,不要太频繁地轮询。在过去,我看到人们使用类变量作为倒数计时器。每次成功检索消息或将消息放入队列时,计时器都会重置为其最大值。当计时器达到零时,轮询队列。这样,您仅在连接上没有其他流量时才轮询队列。
于 2009-11-19T23:57:27.857 回答