我正在升级一个独立的Java应用程序,它使用IBM MQ将消息发送到本地Websphere 8.5服务器。现有的应用程序对MQ代码使用了一堆不同的jars (mq、mqbind、mqjms、connector-api、jms)。
对于新的版本,我看到现在有一个包罗万象的"allclient“MQ (https://mvnrepository.com/artifact/com.ibm.mq/com.ibm.mq.allclient/9.2.0.0),所以我决定使用它。
对于前几条消息,它似乎工作得很好,但在发送4-5条消息后,所有后续消息都将失败,并显示代码2594 (https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.tro.doc/q120510_.htm):
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2594;AMQ9204: Connection to host 'localhost(5558)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2594;AMQ9503: Channel negotiation failed. [3=WAS.JMS.SVRCONN ]],3=localhost(5558),5=RemoteConnection.initSess]
at com.ibm.mq.jmqi.remote.api.RemoteFAP$Connector.jmqiConnect(RemoteFAP.java:13588)
at com.ibm.mq.jmqi.remote.api.RemoteFAP$Connector.access$100(RemoteFAP.java:13125)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1430)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1389)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:377)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:562)
at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:916)
at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:240)在服务器端,我在控制台中获得了以下内容:
CWSIC3712E: A WebSphere MQ client, previously connected from host 127.0.0.1:58963 on transport chain InboundBasicMQLink, has been disconnected because of exception java.io.IOException: Async IO operation failed (1), reason: RC: 55 The specified network resource or device is no longer available.发生此错误后,任何后续发送消息的尝试都将失败,并返回相同的错误。我必须重新启动应用程序,在这一点上,相同的事情重复:在失败开始之前,首先发送4-5条消息。如果我在不更改代码的情况下切换回使用旧的JAR,我就能够发送不限数量的消息而不会出现任何问题。
原因代码让我感到困惑(“MQCONN或MQCONNX调用是从客户端连接的应用程序发出的,但它未能与队列管理器就密码保护算法达成一致。”)因为如果这真的是一个密码问题,为什么前两个消息发送时没有问题?关闭/断开队列/管理器似乎不是问题,因为我会在每次发送和can断点/println之间等待几秒钟,并在下次发送之前查看它们是否每次都被关闭。
有什么想法吗?
发布于 2020-09-30 02:27:06
我找到了这个问题的部分解决方法:
在Java代码中,对于MQMessage对象,我们声明了一个"replyToQueueName“。如果我删除setter,问题似乎就消失了(我们可以发送任意多消息而不会出错)。
我不确定为什么在这种特殊的情况下,这似乎是可行的。发生在代码中比replyToQueueName设置器高得多的MQQueueManager声明上的失败。再加上这个bug只在发送了4-5条消息后才出现,这似乎表明有些东西没有被正确地“关闭”,但据我所知,没有办法“关闭”一条消息,我们已经关闭/断开了管理器和队列的连接。
https://stackoverflow.com/questions/63998640
复制相似问题