Jms 能够连接到远程队列管理器,但无法创建主题连接

Jms 能够连接到远程队列管理器,但无法创建主题连接,jms,ibm-mq,Jms,Ibm Mq,我正试图通过一种非常标准的机制将消息发布到远程JMS队列: TopicConnection tc = null; TopicSession ts = null; TopicPublisher tp = null; Properties p = new Properties(); String providerUrl = "iiop://servername:9810"; String contextFactory = "com.ibm.websphere.naming.WsnInitialCon

我正试图通过一种非常标准的机制将消息发布到远程JMS队列:

TopicConnection tc = null;
TopicSession ts = null;
TopicPublisher tp = null;
Properties p = new Properties();
String providerUrl = "iiop://servername:9810";
String contextFactory = "com.ibm.websphere.naming.WsnInitialContextFactory".trim();
p.put(javax.naming.Context.PROVIDER_URL, providerUrl );
p.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, contextFactory );
InitialContext ct = new InitialContext(p);

{                       
Topic topic = (Topic)ct.lookup( "jms/customer_event" );
TopicConnectionFactory tcf = (TopicConnectionFactory)ct.lookup( "jms/TopicFactory2" );
tc = tcf.createTopicConnection();
....
..
..
}
现在,Topic和TopicConnectionFactory查找很好,但是当涉及到
tcf.createTopicConnection()
时,它抛出:

javax.jms.JMSException: MQJMS2005: failed to create MQQueueManager for 'servername:QMGR1'
Inner exception(s):
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2059
java.net.ConnectException: Connection refused: connect
我打开了MQ资源管理器,该主题位于远程队列管理器上。TopicCooConnectionFactory
TopicFactory2
是否也应该驻留在队列管理器上?因为它不是。
错误的原因是什么?

2059连接被拒绝很可能是网络错误或MQ服务器主机名和/或端口中的typeo。仔细检查WebSphere中的配置和网络连接

JavaDoc for ConnectException也说明了这一点

表示尝试将套接字连接到远程地址和端口时出错。通常,连接被远程拒绝(例如,没有进程在远程地址/端口上侦听)


连接时,主机、端口和通道的详细信息必须正确。如果主机或端口错误,则TCP套接字将被拒绝。如果通道名称错误,队列管理器将拒绝连接并关闭套接字。可能所有详细信息都正确,但队列管理器上的侦听器未运行


如果连接到达队列管理器,则在
[WMQ Install dir]/qmgrs/[QMgr name]/errors/AMQERR01.LOG
文件中会出现错误。如果连接到WMQ,但无法解析队列管理器的名称或指定错误的QMgr,则错误将出现在
[WMQ Install dir]/errors/AMQERR01.LOG
中。如果其中任何一项都没有输入,则连接无法连接到WMQ,您需要检查侦听器或网络。

谢谢。所有细节都是正确的。现在,我将接受你的回答,并按照你的建议进行调查。帖子标题中有一个小小的差异,上面写着“能够连接到QMgr…”。如果你不按照目前给出的建议解决这个问题,你可能需要更新帖子,解释为什么你认为自己连接到QMgr。2059响应代码表示连接未成功,这就是我的响应依据。您好……我认为与队列管理器的连接成功,但主题连接失败。我的原因是,在错误中,它实际上显示了websphere mq中定义的队列管理器的名称。如果连接未成功,它如何知道队列管理器的名称?嗯…该错误消息看起来像是QMgr名称被定义为
servername:QMGR1
,我认为应该是
QMGR1
。这将导致2059和一个错误记录到
/var/mqm/errors/AMQERR01.LOG
。您可以打印托管对象定义并更新post吗?特别是连接工厂,但也可以随意包含主题对象。谢谢。我解决了这个问题。端口9810是正确的,但TopicFactory2中定义的端口是错误的。主机名/端口中出现n/w错误和键入错误的可能性较小。原因是它能够毫无问题地查找Topic和TopicConnectionFactory的jndi名称。它还在错误消息中显示队列管理器的名称,但在尝试创建主题连接时失败。