Поглотить сообщение от MQ - PullRequest
2 голосов
/ 13 марта 2020

Я пытаюсь получить сообщение от MQ, но код зависает и не показывает вывод.

JmsFactoryFactory FF = jmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = FF.createConnectionFactory();
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
cf.setStringProperty(WMQConstants.WMQ_PORT, PORT);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
cf.setStringProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JMS");
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(queuename);
MessageConsumer consumer1 = session.createConsumer(destination);

Message reply = consumer1.receive();
System.out.println(reply);

Оно не показывает сообщение, зависает и даже не завершается.

1 Ответ

5 голосов
/ 13 марта 2020

Вам нужно позвонить start() в вашем экземпляре javax.jms.Connection, чтобы сообщения могли передаваться потребителю, например:

connection.start()

Также стоит отметить ожидается, что вызов javax.jms.MessageConsumer#receive() будет блокироваться до тех пор, пока не будет получено сообщение, поэтому вы видите ожидаемое поведение там. Если вы не хотите блокировать, вы можете позвонить javax.jms.MessageConsumer#receive(long) и указать время ожидания (в миллисекундах).

...