Как синхронизировать onMessage () из MessageListener - PullRequest
0 голосов
/ 27 февраля 2012

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

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

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

1 Ответ

0 голосов
/ 28 февраля 2012

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

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 как потребитель сообщений, который обрабатывает сообщение синхронно. Тем не менее, я хочу получить список сообщений из очереди, чтобы пользователь мог удалить его, если пожелает. Выше код возвращает нулевой список, если у меня есть получатель очереди.

...