Потребитель очереди JMS: синхронный прием() или однопоточный onMessage()

Мне нужно потреблять из Q и ставить ключ последовательности на каждое сообщение, чтобы указать порядок. т. е. потребление должно быть последовательным. С точки зрения производительности/пропускной способности, лучше использовать блокирующий метод receive() или асинхронный прослушиватель с однопоточной конфигурацией в методе onMessage()?

Спасибо.


person wqt    schedule 08.10.2014    source источник


Ответы (1)


Существует множество аспектов, влияющих на производительность и пропускную способность; с точки зрения чистого JMS невозможно утверждать, что синхронная или асинхронная модель получения сообщений будет менее или более эффективной. Это будет зависеть от большого количества факторов: от того, как написано приложение, других ресурсов, которые оно использует, реализации выбранного вами провайдера обмена сообщениями и других факторов, таких как производительность компьютера и конфигурация как клиентского, так и серверного компьютеров.

В этом обсуждении Single vs Multi-threaded JMS Producer рассматривается некоторые из этих тем.

Для последовательности, если вы работаете с одним потоком, с одним сеансом, спецификация JMS дает некоторые гарантии упорядочения сообщений; лучше всего просмотреть спецификацию, чтобы увидеть, соответствует ли она вашим общим требованиям.

Часто люди вставляют порядковый номер приложения во время создания сообщения; поэтому потребитель может проверить, правильно ли он получает сообщение. Добавление порядкового номера во время потребления не поможет этому потребителю.

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

person Calanais    schedule 09.10.2014
comment
Спасибо за ответ. Я также подозревал, что трудно сказать, был ответ. Что касается порядка сообщений, мне не нужно было бы делать что-либо последовательное на стороне потребителя, если производитель Q вставит ключи последовательности, но они этого не сделают. Я бы пошел дальше и сказал, что это несоответствие импеданса между обменом сообщениями и порядком, точно так же, как и при отображении ИЛИ. - person wqt; 09.10.2014
comment
В качестве опции потребитель может просматривать временные метки сообщений; однако это можно отключить, и это зависит от того, насколько вы доверяете точности времени. Но это может дать потребителю указание на то, что что-то не в порядке. - person Calanais; 10.10.2014