У меня есть ситуация, когда мне нужно прочитать (текущие) сообщения из темы и поместить их в другую очередь. У меня есть сомнения, нужна ли мне jms Queue или я могу удовлетвориться java Queue в памяти. Я буду читать из очереди другими потоками в том же jvm и выполню клиентское подтверждение сообщения в теме после прочтения сообщения из очереди (в памяти) и обработаю его по мере необходимости (отправлю его на удаленный IBM MQ). Поэтому, если мой клиент выйдет из строя, сообщения, которые существовали в очереди в памяти, будут потеряны, но все еще будут существовать в теме и будут повторно доставлены мне. Я прав ?
Очередь jms против очереди java в памяти
Ответы (2)
Отчасти это зависит от того, как вы настроили очередь/тему и строку подключения, которую вы используете для чтения из IBM MQ, но если вы используете значения по умолчанию, вы ПОТЕРЯЕТЕ сообщения, если читаете их в очередь в памяти.
Я бы использовал ActiveMQ либо в той же JVM, что и в библиотеке, чтобы вы позаботились о получении, доставке и сохранении.
Кроме того, если вы слушаете тему, вам не будут отправляться пропущенные сообщения после сбоя, даже если вы повторно подключитесь после этого, если вы не
- настроил вашего клиента как постоянного подписчика
- повторно подключиться во время (до достижения expireMessagesPeriod)
Библиотека ActiveMQ невелика, и ее стоит использовать, если важна доставка каждого сообщения, особенно в асинхронной среде.
Основное отличие состоит в том, что данные в памяти теряются, когда приложение выходит из строя; Очередь JMS теряет данные, когда сервер выходит из строя, ЕСЛИ тема/очередь не являются постоянными. Первое гораздо более вероятно, чем второе, поэтому я бы также посоветовал использовать JMS.