#activemq-artemis
#activemq-artemis
Вопрос:
У нас уже есть настройка Apache ActiveMQ Artemis. Новое требование требует, чтобы нам требовалось уведомление Artemis ТОЛЬКО тогда, когда количество сообщений в очереди превышает 100. Я видел сообщения с уведомлениями, но все они связаны с операциями (например, созданием очереди, удалением, нарушением безопасности и т. Д.), Но не с условием. Как я могу этого добиться?
Ответ №1:
В самой ActiveMQ Artemis нет ничего, что могло бы напрямую отправлять уведомления, когда количество сообщений в очереди превышает заданный размер.
Обычно в такой ситуации у вас будет внешний инструмент для мониторинга брокера и отправки уведомлений на основе любых показателей и пороговых значений, которые вас интересуют.
Например, вы можете настроить плагин Prometheus metrics для предоставления метрик от брокера, а затем использовать оповещения Prometheus, или вы можете пойти дальше и интегрироваться с Grafana и использовать его оповещения.
Если вам нужно более простое решение, вы могли бы просто написать Java-приложение или скрипт, который опрашивал брокера через JMX или HTTP, а затем отправлял оповещения по мере необходимости. Вы можете найти пример Java-приложения, которое использует JMX для операций управления, в каталоге брокера examples/features/standard/jmx
. Если вы хотите использовать HTTP, вы можете использовать команду, например curl
, для вызова методов управления в MBeans брокера. Вам просто нужно передать ему «имя объекта MBean». «Имя объекта» для очереди на брокере следует этому шаблону:
org.apache.activemq.artemis:broker="<brokerName>",component=addresses,address="<addressName>",subcomponent=queues,routing-type="<routingType>",queue="<queueName>"
Конечно, вам нужно будет заменить <brokerName>
, <addressName>
, <routingType>
, и <queueName>
соответствующими значениями для вашей конфигурации.
Вот простой пример, который считывает MessageCount
атрибут для очереди foo
:
curl -k --user admin:admin -H "Origin: http://localhost:8161" "http://localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker="0.0.0.0",component=addresses,address="foo",subcomponent=queues,routing-type="anycast",queue="foo"/MessageCount"
Обратите внимание, что "
символы были экранированы, "
чтобы обеспечить правильное выполнение в оболочке.
Комментарии:
1. Спасибо за быстрый ответ, Джастин. Я не должен использовать внешние инструменты. Не могли бы вы указать мне пример HTTP-кода для извлечения счетчика?
2. Я обновил свой ответ, чтобы ответить на ваш комментарий. Надеюсь, это поможет!
3. Мой ответ ответил на ваш вопрос? Если да, пожалуйста, отметьте это как правильное, чтобы помочь другим пользователям, у которых может возникнуть такой же вопрос в будущем. Спасибо!