2012-02-27 2 views
0

У меня есть веб-приложение spring3. Я использую org.springframework.jms.listener.DefaultMessageListenerContainer для настройки моего прослушивателя сообщений. У меня зарегистрирован MDPOJO. Я хотел бы, когда onMessage() запускается для конкретного запроса, другие должны дождаться завершения первого. Другими словами, метод onMessage() вызывает дополнительный рабочий поток, и для его завершения потребуется время. Другие сообщения в очереди не следует выбирать onMessage, пока не подтвердит, что предыдущий запрос завершен.Как синхронизировать onMessage() MessageListener

ли возможность синхронизировать OnMessage обработки() Мне нужно сделать следующее:.

  1. Пользователи будут размещать г N количество сообщений в очереди
  2. я должен быть имеющий интерфейс, где пользователь может удалить сообщение из очереди.
  3. Когда одно сообщение находится в процессе обработки, любое другое сообщение не нужно подбирать.
  4. Пользователь должен иметь возможность изменить приоритет обработки сообщений
+0

Вам действительно нужно использовать JMS и очереди сообщений? Если да, возможно, вы попытаетесь настроить только одного потребителя очереди (например, 'setConcurrentConsumers (1)') –

+0

Хорошо. Теперь я должен программно контролировать JBoss Queue. Можно ли отслеживать состояние очереди JBoss с помощью java-кода? Возможно, мне придется удалить определенные сообщения, которые я не хочу обрабатывать. Также мне нужно изменить приоритет обработки. Я попробовал другой механизм. Я пробовал путь в http://middlewaremagic.com/jboss/?tag=jms. Но, похоже, не работает – ASChakkalakal

+0

Мониторинг очереди JMS зависит от платформы. Какую версию JBoss Messaging вы используете? –

ответ

0

Я мог программно список сообщений в очереди, используя код ниже:

public void listAllJMS_Messages() 
    { 
     try { 
      ObjectName objectName=new ObjectName("jboss.messaging.destination:name=DLQ,service=Queue"); 
      List ls = (List) server.invoke(objectName, "listAllMessages" , null, null); 
      List<javax.jms.Message> messages=(List<javax.jms.Message>)server.invoke(objectName, "listAllMessages" , null, null); 
      int count=0; 
      for(javax.jms.Message msg : messages) { 
       System.out.println((++count)+"t"+msg.getJMSMessageID()); 
       if(msg.getJMSType() != null && msg.getJMSType().equalsIgnoreCase("Text")) { 
       TextMessage text = (TextMessage)msg; 
       System.out.println(text.getText()); 
       } 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     // System.out.println((++count)+"t"+msg.getText()); 
    } 

Однако вышеприведенный список код сообщения из тех Очереди, которые пока у меня нет потребителей. В моем случае у меня есть MDPOJO как потребитель сообщений, который обрабатывает сообщение синхронно. Тем не менее, я хочу получать сообщения списка из очереди, чтобы пользователь мог удалить его, если захочет. Превышение кода возвращает нулевой список, если у меня есть потребитель очереди.

+0

. API управления описан здесь: http://docs.jboss.org/jbossmessaging/docs/usermanual-2.0.0.beta4/html/management.html , Он также содержит некоторые образцы. –

+0

Я прошел через doc.Still, я не смог найти решение. Мне интересно, есть ли способ отслеживать очередь JBoss Messaging, которая в настоящее время используется. Вещи прекрасно работают, когда моя очередь не имеет потребителя вообще. Если у меня есть потребитель, то работает только messgaeCount.Listing message return null – ASChakkalakal

+0

Пробовали ли вы через JMX-клиент (например, JConsole)? Если вы можете перечислить и удалить сообщения от клиента JMX, вы можете сделать это программно. –

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