Websphere MQ异步放不起作用

时间:2014-06-07 16:09:22

标签: java asynchronous ibm-mq

我们有一个使用Websphere MQ v.7.0.1的应用程序。服务器在linux上,客户端应用程序在Windows 7上运行,并使用Java的MQ类用Java编写。客户端和服务器之间的队列之一专门用于客户端和服务器之间的keepalive协议。由于各种原因我们不需要进入,这对于保持与真实后端的连接是必要的。其中MQ服务器只是其中的一部分。

Keepalive协议工作得相当好,除非在其中一台服务器出现故障并且客户端需要重新连接时才会出现这种情况。然后我们有问题。

我们已经决定实施keepalive协议太复杂了。客户端只需要定期将这些keepalive消息发送到服务器,并且无需关心它们是否到达服务器。如果他们不在,服务器将采取 适当的行动。

因此,异步推荐表明了自己。我们实现它的第一次尝试如下:

来自:

MQPutMessageOptions pmo = new MQPutMessageOptions();  // accept the defaults
QueueKL.put(mqMessage,pmo);                                             

到此:

MQPutMessageOptions pmo = new MQPutMessageOptions();                    
pmo.options |= CMQC.MQPMO_ASYNC_RESPONSE;                               
QueueKL.put(mqMessage,pmo); 

结果令人不快。而不是立即返回,put调用永远不会返回,调用它的线程永远不会显示另一种生命迹象。

当然这个调用是在一个try-catch块中启动的,我们试图抓住任何可能抛出的可能的Throwable,即catch (Throwable t)并记录它。没有记录任何类型。此时线程似乎被阻止,这与我预期发生的完全相反。

我必须遗漏一些对我如何实施这一点至关重要的事情 call,(Queue或QueueManager中需要一些特殊的设置吗?这里的IBM文档非常稀疏)但我不知道那是什么。请帮助我深究这一点。

1 个答案:

答案 0 :(得分:1)

这有帮助吗?你有什么不幸的机会在7.0.1.8吗?

http://www-01.ibm.com/support/docview.wss?uid=swg1IC85084

“此问题也会影响WebSphere MQ类的用户 将消息放入WebSphere MQ队列的Java 在PUT消息选项中指定MQPMO_ASYNC_RESPONSE (MQPMO)结构。“

尝试确保客户端为7.0.1.9或7.1.0.2或更高版本