Я пытаюсь написать свое первое простейшее приложение JMS с помощью встроенного брокера ActiveMQ. Приложение является Sping рабочего стола applction и вот его главный метод:JMS-сообщение не удалось получить из очереди
public static void main(String[] args) throws JMSException
{
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/appContext.xml");
ConnectionFactory cf = (ConnectionFactory) context.getBean("jmsFactory");
Connection connetcion = null;
try{
connetcion = cf.createConnection();
final Session session = connetcion.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Destination testQueue = (Destination) context.getBean("testQueue");
String text = "Test message";
MessageProducer mp = session.createProducer(testQueue);
Message msg = session.createTextMessage(text);
mp.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
mp.send(msg);
MessageConsumer mc = cf.createConnection().createSession(false, Session.AUTO_ACKNOWLEDGE).createConsumer(testQueue);
TextMessage recievedMsg = null;
recievedMsg = (TextMessage) mc.receive(); //1 <---------- Here is the problem
System.out.println(recievedMsg.getText());
} catch(JMSException jmse){
throw new AssertionError("JMS Exception");
}
finally{
connetcion.close();
}
}
Конфигурация пружины содержит следующие бобы:
<amq:broker useJmx="false" persistent="false">
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:61616" />
</amq:transportConnectors>
</amq:broker>
<amq:queue id="testQueue" physicalName="com.badmitrii.test" />
<amq:connectionFactory id="jmsFactory" brokerURL="tcp://localhost:61616" />
Я пытался послать сообщение в очередь, а затем потребить сообщение позже в той же теме. Но когда я вызываю метод на //1
главный поток ios заблокирован, так как в очереди нет никакого mesasge.
Что я сделал не так?
Я думаю, что потребитель должен быть зарегистрирован в очереди, прежде чем отправлять сообщение в очередь, потому что, если очередь не знает какого-либо потребителя, она отбрасывает сообщение. –