2009-11-19 89 views
1

我们目前正在构建一个需要与某些IBM WebSphere队列进行通信的应用程序。在队列的另一头还有另一个世界。由于一些未知的情况(对我而言),连接到MQQueueManager每次需要17秒,但通过队列发送和接收消息并不是一件耗时的工作。因为我们现在将一个Web服务放在WebSphere前面,所以我们提出了装饰和缓存MQQueueManagers和MQQueues的想法,并在每个消息发送之前验证它们是否已连接并分别打开;如果没有,我们尝试连接到MQQueueManager,分别打开MQQueue(再次,连接到MQQueueManager需要17秒,打开MQQueue是“即时”)。所以我们期待WebSphere每一次都会断开与MQQueueManager的连接(我无法确定,因为我们现在不能进行严格的测试,但我们应该谨慎),而不幸的调用程序会等待17秒才能重新连接。就目前而言,我们无法预测这种事情的发生。 我们当前的实现使用.NET的WebSphere MQ类。当MQQueueManager断开连接或关闭相关队列时,是否有可能收到回调通知?如何在IBM Queue Manager断开连接时接收通知?

回答

1

是的!如果您使用最新的WMQ .Net类和最新的IA9H SupportPac,您将获得异步回调方法。 (这里附带.Net示例代码,演示如何注册和使用回调函数)。我的理解是,如果连接是可用的,则此方法会在您的回调例程有消息时传递消息,或者向注册的异常侦听器传递例外丢失或队列设置为GET(DISABLED)

获取最新的WMQ客户端here。使用名称MQC *查找SupportPacs。 v8.0客户端是MQC8,v9客户端是MQC9等。

如果您有旧版本的.Net WMQ类,并且由于某种原因无法升级,您可以始终保持单独的线程打开并定期轮询队列。不过,不要频繁轮询。在过去,我看到人们使用类变量作为倒数计时器。每次成功检索消息或将其放入队列时,定时器都会重置为最大值。当计时器达到零时,轮询队列。这样,只有在连接上没有其他流量时才轮询队列。

+0

非常感谢!那就是我一直在寻找的东西! – DaeMoohn 2009-11-20 07:32:06

+0

它说没有找到文件。这不是免费的,还是我应该使用公司凭据? – DaeMoohn 2009-11-20 07:59:40

+0

有人可以提供一个代码样本吗?我没有找到.NET类的任何东西。 – DaeMoohn 2009-11-20 08:46:25

相关问题