【发布时间】:2020-03-09 17:27:50
【问题描述】:
我编写了一个客户端应用程序来连接到 MQ。它在 svrconn 频道上工作正常,但在其他频道上不工作。
我的代码:
try {
// Create a connection factory
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
// Set the properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");
cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
cf.setStringProperty(WMQConstants.USERID, APP_USER);
cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD);
// Create JMS objects
context = cf.createContext();
destination = context.createQueue("queue:///" + QUEUE_NAME);
long uniqueNumber = System.currentTimeMillis() % 1000;
TextMessage message = context.createTextMessage("Your lucky number today is " + uniqueNumber);
producer = context.createProducer();
producer.send(destination, message);
System.out.println("Sent message:\n" + message);
consumer = context.createConsumer(destination); // autoclosable
String receivedMessage = consumer.receiveBody(String.class, 15000); // in ms or 15 seconds
System.out.println("\nReceived message:\n" + receivedMessage);
recordSuccess();
}
请帮忙解决这两个问题:
- 如何连接到处于客户端模式的 qmgr?
- 如何使此代码也连接到其他频道?
现在,当我尝试使用其他频道时,出现以下错误:
JMSWMQ0018: Failed to connect to a queue manager 'qmgr name' with connection mode 'Client'
【问题讨论】:
-
您能否说明您还想连接哪些其他频道? MQ 客户端只能连接到 SVRCONN 通道。如果您尝试将 MQ 客户端连接到 RCVR 或其他通道类型,它将失败。如果这是你要问的,我会写一个包含更多细节的答案。
-
您能澄清一下“处于客户端模式的 qmgr”是什么意思吗?您说您已成功将应用程序连接到 SVRCONN 通道。这意味着您成功地将应用程序连接到客户端模式下的队列管理器。需要明确的是,处于客户端模式的是“应用程序连接”,而不是队列管理器。
-
是的,@JoshMc。这就是我的意思。为什么这段代码只能连接到 SVRCONN 通道,而不能连接到 RCVR 等其他通道...其次,如果我需要连接到 RCVR 或任何其他通道,我需要在代码中进行哪些更改?
-
应用程序仅曾经连接到
SVRCONN频道。所有其他通道类型都用于将不同的队列管理器连接在一起,而不是用于连接应用程序。例如,无法更改您的代码以连接到RCVR频道,这不是RCVR频道的目的。为什么要这样做?