Создание очереди JMS на WildFly 8.2 (с JMS-провайдером HornetQ) и с активированным сообщением bean-компонентом этой очереди, я увидел, что если производитель быстро передает несколько сообщений в очередь, сообщение управляемый bean-компонент не обрабатывает их обязательно в том порядке, в котором они были отправлены. Можно ли настроить WildFly так, чтобы сообщения обрабатывались в том порядке, в котором они отправлены (сначала сначала)?Есть ли способ сделать обработку очереди сообщений MDB, на WildFly, FIFO?
ответ
(я думаю, поняли, что происходит после прочтения 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, хотя я не могу точно определить точное место).
https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/HornetQ_User_Guide/ch30s03.html – 99Sono