Временно скопировать определенную очередь ActiveMQ для подсчета количества сообщений?

#jms #activemq

#jms #activemq

Вопрос:

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

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

Возможно ли создать копию очереди, не используя сообщения из нее? Есть ли в этом какие-либо недостатки?

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

Ответ №1:

Этот подход кажется довольно излишним, учитывая, что вы хотите просто получить количество сообщений в очереди, что легко достижимо с помощью JMX MBeans для статистики очереди. Вы также можете получить доступ к MBeans с помощью API Rest на базе Jolokia.

Если вы настроены против JMX, вы можете использовать плагин statistics broker, чтобы разрешить API на основе сообщений получать доступ к статистике брокера.

Комментарии:

1. Я хочу получить количество сообщений, которые были добавлены в очередь в течение определенного периода времени. Не количество всех сообщений в очереди.

2. @ChetanParakh — JMX записывает количество очередей / удалений из очереди, а также общий размер. Вы могли бы сравнить количество очередей в два момента времени. Попытка скопировать очередь — даже если это было возможно — не решит вашу проблему, если вы не сможете скопировать ее мгновенно.

3. @ChetanParakh похоже, вы хотите рассматривать брокера как базу данных, которой он, безусловно, не является.