我试图通过一个非常标准的机制将消息发布到远程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 explorer,主题存在于远程队列管理器上。是TopicCoonectionFactory TopicFactory2
也应该驻留在队列管理器上吗?因为它没有。
可能是错误的原因是什么?
答案 0 :(得分:2)
连接时,主机,端口和通道的详细信息必须正确。如果主机或端口错误,则拒绝TCP套接字。如果通道名称错误,则队列管理器将拒绝连接并关闭套接字。您可能已将所有详细信息都正确,但队列管理器上的侦听器未运行。
如果连接到达队列管理器,那么[WMQ Install dir]/qmgrs/[QMgr name]/errors/AMQERR01.LOG
文件中就会出错。如果连接到达WMQ但无法解析队列管理器的名称或指定错误的QMgr,则错误将在[WMQ Install dir]/errors/AMQERR01.LOG
中。如果其中任何一个都没有条目,那么连接就不会进入WMQ,你需要检查监听器或网络。
答案 1 :(得分:0)
2059连接被拒绝很可能是MQ服务器主机名和/或端口中的网络错误或类型。在WebSphere和网络连接中仔细检查您的配置。
ConnectException的JavaDoc也说明了这个http://docs.oracle.com/javase/6/docs/api/java/net/ConnectException.html
表示尝试将套接字连接到远程地址和端口时发生错误。通常,远程拒绝连接(例如,没有进程正在侦听远程地址/端口)。