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