Рассмотрим сценарий ниже:
Application - MessageReaderApplication (Spring Boot Application)
Deployed in - PaaS_node_1 and PaaS_node_2
Queue Manager - QM
Queue - QM_QUEUE
Concurrency - 2
MessageReaderApplication читает сообщения из QM_QUEUE и обрабатывает их в соответствии с client_number в сообщении ( client_number является уникальным атрибутом сообщение). Приложение ведет себя хорошо для двух независимых сообщений (разные client_number ), поскольку обработка одного сообщения не зависит от других.
Проблема возникает, когда сообщения приходят для одного и того же клиента (тот же client_number ) дважды в одно и то же время в очереди. В этом случае желательным действием является обработка первого сообщения перед вторым. Но здесь мы не можем предсказать порядок выполнения сообщений. Предположим, что PaaS_node_1 выбрал первое сообщение и начал обрабатывать его, а второе сообщение выбрал PaaS_node_2 и завершил обработку до обработки первого сообщения PaaS_node_1.
Как мы можем достичь такого вида управления параллелизмом в сообщениях JMS?