Порядок получения сообщений в очереди JMS
Я добавляю два сообщения JMS в одном и том же месте назначения последовательно. Будут ли оба эти сообщения получены в том же порядке, в котором я их добавил, или есть вероятность обратного упорядочения, то есть когда сообщение будет получено первым в пункте назначения, оно будет извлечено первым.
Я добавляю в пункт назначения как:
producer.send(Msg1);
producer.send(Msg2);
Msg1
а также Msg2
будет добавляться последовательно во всех случаях (например, сбои сети и задержки и т. д.)?
2 ответа
Порядок сообщений не гарантируется (и не определяется спецификацией), а порядок сообщений Total JMS объясняет детали того, почему. Также см. Сообщение о переполнении стека. Как обработать порядок сообщений в JMS?,
Согласно спецификации JMS2
JMS defines that messages sent by a session to a destination must be received
in the order in which they were sent. This defines a partial ordering
constraint on a session’s input message stream.
JMS does not define order of message receipt across destinations or across
a destination’s messages sent from multiple sessions. This aspect of a
session’s input message stream order is timing-dependent. It is not under
application control.
Также
Although clients loosely view the messages they produce within a session
as forming a serial stream of sent messages, the total ordering of this stream
is not significant. The only ordering that is visible to receiving clients is
the order of messages a session sends to a particular destination.
Several things can affect this order like message priority,
persistent/non persistent etc.
Поэтому, чтобы ответить на ваш вопрос, сообщения будут получены в том же порядке, в котором они были отправлены с вышеуказанной информацией. Однако порядок доставки сообщений на сервер будет ограничен такими ограничениями, как приоритет сообщений, постоянный / непостоянный и т. Д.