2009-10-02 3 views
1

Я использую JMS Glassfish.JMS-клиент не получает сообщений

Я могу добавлять сообщения в очередь. Я вижу сообщения, используя объект QueueBrowser. Однако MessageConsumer (или QueueReceiver) не может получить какое-либо сообщение и вернуть null. Срок действия сообщения равен 0, и я не забудьте открыть соединение.

Любые идеи?

Вот код:

 Session session = null; 
     Connection conn = null; 

     try 
     { 
     InitialContext jndi = new InitialContext(); 

      ConnectionFactory qFactory = (ConnectionFactory)jndi. 
       lookup("myConnectionFactory"); 
       conn = qFactory.createConnection(); 
       conn.start(); 
     Queue queue = (Queue)jndi.lookup("myQueueName"); 
     session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); 


      QueueReceiver mc = ((QueueSession)session).createReceiver(queue); 

     Object m = mc.receive(2000); 
     //m is NULL! 

     QueueBrowser browser = session.createBrowser(queue); 


     for(Enumeration e = browser.getEnumeration(); e.hasMoreElements();) 
     { 
      //there are many messages here... 
     } 
+1

Любой код для показа? Это может помочь вам узнать ... –

ответ

1

Это было бы хорошо иметь код клиента.

Аналогичная ситуация произошла со мной, когда вы неправильно подключили/закрыли соединение на стороне отправителя. Сообщение будет видно при использовании консоли администратора, однако еще не доступной для MDB.

Надеюсь, это поможет.

0

Выполняется ли этот код на сервере приложений? Если это так, я бы получил необходимые объекты с помощью аннотаций, а для получателя сообщений я использовал MDB. Если это часть автономного кода, мне пришлось черпать время, когда работающий клиент JNDI работал, я вернулся к использованию «необработанного» Java API.

0

Я был свидетелем того же поведения, которое происходило после первого сеанса фиксации, что означает, что перед сообщениями, где получено правильно. В моем случае проблема заключалась в том, что я повторно создавал приемник, сохраняя тот же сеанс. Как указано в this article:

Создание временных направлений, потребителей, производителей и соединения являются все синхронные операции запрос-ответ с брокером и поэтому следует избегать обработки каждого запроса, поскольку это приводит к большим количеством общаться с брокером JMS.

Решение было таким же простым, как повторное использование одного и того же приемника.

Смежные вопросы