с использованием следующего JmsListener:
@JmsListener(destination = JMS_FOO_QUEUE, concurrency = "1", selector = JMS_BAR_SELECTOR)
public void receiveMessage(Message message) {
logger.debug("ENTER receiveMessage(), message= {}", message);
service.doStuff(message); //slow or long running task in spring Autowired Service bean
logger.debug("LEAVE receiveMessage()");
}
и метода Spring @Service Bean:
@Override
public void doStuff(Message message) {
logger.debug("ENTER doStuff()");
... //slow or long running task depending on message
logger.debug("LEAVE doStuff()");
}
У меня возникли следующие проблемы параллелизма:
2018-09-27 22:17:05,958 [DefaultMessageListenerContainer-XXX][DEBUG][MessageReceiver] - ENTER receiveMessage(), message= ActiveMQTextMessage {commandId = 813...
2018-09-27 22:17:05,990 [DefaultMessageListenerContainer-XXX][DEBUG][ServiceImpl] - ENTER doStuff(), longer execution path - commandId = 813
2018-09-27 22:17:05,991 [DefaultMessageListenerContainer-YYY][DEBUG][MessageReceiver] - ENTER receiveMessage(), message= ActiveMQTextMessage {commandId = 817...
2018-09-27 22:17:06,002 [DefaultMessageListenerContainer-YYY][DEBUG][ServiceImpl] - ENTER doStuff(), faster execution path - commandId = 817
2018-09-27 22:17:06,005 [DefaultMessageListenerContainer-YYY][INFO ][ServiceImpl] - updated data in database
2018-09-27 22:17:06,005 [DefaultMessageListenerContainer-YYY][DEBUG][ServiceImpl] - LEAVE doStuff() - commandId = 817
2018-09-27 22:17:06,054 [DefaultMessageListenerContainer-XXX][WARN ][MessageListenerContainer] - (Crash, org.hibernate.StaleStateException) - commandId = 813
doStuff ()Метод обновляет некоторые данные в базе данных на основе бизнес-объекта в сообщении JMS, поэтому это нужно сделать по порядку.
Я отмечаю, что указание параллелизма = 1 в JmsListener ограничит выполнение только одним потоком в порядке FIFO.Но, как видно из журналов, этого не происходит - другой потребительский поток работает над следующим сообщением, даже если первый потребительский поток еще не завершен.
Почему это происходит?
Spring - 4.2.7.RELEASE