Очередь jms против очереди java в памяти

У меня есть ситуация, когда мне нужно прочитать (текущие) сообщения из темы и поместить их в другую очередь. У меня есть сомнения, нужна ли мне jms Queue или я могу удовлетвориться java Queue в памяти. Я буду читать из очереди другими потоками в том же jvm и выполню клиентское подтверждение сообщения в теме после прочтения сообщения из очереди (в памяти) и обработаю его по мере необходимости (отправлю его на удаленный IBM MQ). Поэтому, если мой клиент выйдет из строя, сообщения, которые существовали в очереди в памяти, будут потеряны, но все еще будут существовать в теме и будут повторно доставлены мне. Я прав ?


person user5157427    schedule 12.02.2016    source источник


Ответы (2)


Отчасти это зависит от того, как вы настроили очередь/тему и строку подключения, которую вы используете для чтения из IBM MQ, но если вы используете значения по умолчанию, вы ПОТЕРЯЕТЕ сообщения, если читаете их в очередь в памяти.

Я бы использовал ActiveMQ либо в той же JVM, что и в библиотеке, чтобы вы позаботились о получении, доставке и сохранении.

Кроме того, если вы слушаете тему, вам не будут отправляться пропущенные сообщения после сбоя, даже если вы повторно подключитесь после этого, если вы не

  1. настроил вашего клиента как постоянного подписчика
  2. повторно подключиться во время (до достижения expireMessagesPeriod)

Библиотека ActiveMQ невелика, и ее стоит использовать, если важна доставка каждого сообщения, особенно в асинхронной среде.

person TheFiddlerWins    schedule 12.02.2016

Основное отличие состоит в том, что данные в памяти теряются, когда приложение выходит из строя; Очередь JMS теряет данные, когда сервер выходит из строя, ЕСЛИ тема/очередь не являются постоянными. Первое гораздо более вероятно, чем второе, поэтому я бы также посоветовал использовать JMS.

person Scott Sosna    schedule 18.02.2016