Java: порядок доставки сообщений JMS для разных сеансов

Недавно мой коллега сказал следующее:

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

Теперь я знаю, что JMS не гарантирует порядок доставки сообщений в целом, но этот угол «нескольких сеансов» для меня в новинку. Есть ли правда в этом?


person shrini1000    schedule 11.05.2012    source источник


Ответы (2)


Согласно спецификации JMS (раздел 4.4.10 Порядок сообщений) гарантирован только порядок сообщений, отправленных из сеанса в пункт назначения (и даже в этом случае с некоторыми оговорками).

Это означает:

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

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

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

tl; dr Да, ваш коллега прав. Еще раз обратите внимание, что даже гарантия в случае одного сеанса / одного пункта назначения не очень сильна, особенно если задействованы разные параметры сообщения (подробности см. В связанном PDF-файле).

person Joachim Sauer    schedule 11.05.2012

Поскольку JMS является «асинхронным», нет никакой гарантии порядка доставки сообщений.

person Upendra Gughane    schedule 26.09.2014