2016-08-17 7 views
1

Создание очереди JMS на WildFly 8.2 (с JMS-провайдером HornetQ) и с активированным сообщением bean-компонентом этой очереди, я увидел, что если производитель быстро передает несколько сообщений в очередь, сообщение управляемый bean-компонент не обрабатывает их обязательно в том порядке, в котором они были отправлены. Можно ли настроить WildFly так, чтобы сообщения обрабатывались в том порядке, в котором они отправлены (сначала сначала)?Есть ли способ сделать обработку очереди сообщений MDB, на WildFly, FIFO?

ответ

2

(я думаю, поняли, что происходит после прочтения https://stackoverflow.com/a/6744508/999264)

Есть несколько потоков, которые ыполните onMessage метод, управляемый сообщениями (MDB), один поток в сообщении, и, таким образом, если несколько сообщений прибывают почти одновременно невозможно узнать, какое сообщение будет обработано первым (потому что нельзя знать, какой из потоков завершит выполнение onMessage). Единственный способ узнать это - убедиться, что число потоков равно 1: в этом случае единственный поток сначала обрабатывает первое сообщение, затем второе и т. Д.

В WildFly и JBoss аннотации @MessageDriven имеет «активацию конфигурация свойство» maxSession, который, как я понимаю, контролирует максимальное количество потоков, используемых для обработки сообщений, которые поступают из очереди к МДБУ. Установка его значения на 1, как показано ниже

@MessageDriven(activationConfig = { 
       @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "java:/jms/queue/myOwnQueue"), 
       @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
       @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1")}) 
public class MyOwnMDB implements MessageListener { 

    public void onMessage(Message message) { 
     System.out.println("message received " + message.toString()); 
    } 

} 

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

Я изменил название вопроса с оригинального названия, «Есть ли способ сделать очередь сообщений на WildFly FIFO?», отображается неверно: сама очередь - FIFO (на самом деле, я нашел где-то написанное, что это часть спецификации JMS, хотя я не могу точно определить точное место).

+0

https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/HornetQ_User_Guide/ch30s03.html – 99Sono