2015-11-05 4 views
1

Я пытаюсь написать свое первое простейшее приложение 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.

Что я сделал не так?

+1

Я думаю, что потребитель должен быть зарегистрирован в очереди, прежде чем отправлять сообщение в очередь, потому что, если очередь не знает какого-либо потребителя, она отбрасывает сообщение. –

ответ

1

похоже, что вы не запустили() ваше соединение.

connetcion = cf.createConnection(); 
connetcion.start(); 

должен сделать трюк.

+0

Собственно. Вы правы, теперь это работает. Но странно, что реализация не сообщила мне об этом, выбросив исключение или что-то вроде этого .... –