Каковы некоторые стратегии для обнаружения, когда другие процессы прослушивают очередь или тему? - PullRequest
1 голос
/ 10 марта 2011

У меня есть система (назовем ее Системой A), которая позволяет пользователю включать определенные функции обработки.Когда эти функции активированы, Система A будет прослушивать сообщения от Системы B.

Система B в настоящее время отправляет эти сообщения в тему постоянно, независимо от того, прослушивает ли Система A.Эти сообщения не слишком дорого генерировать и отправлять, но, тем не менее, я бы хотел избежать их отправки, если система A не прослушивает.(Обратите внимание, что эти сообщения не должны быть долговечными, система A может запускать / останавливать прослушивание в любой момент и работать правильно.)

Я использую ActiveMQ в качестве посредника сообщений.

Я могусм. несколько возможных решений этой проблемы.

  1. Создайте сообщение регистрации / подписки, которое Система A будет отправлять в Систему B. Я не совсем уверен, как часто это сообщение будет отправляться, иликакое состояние должно быть сохранено любой из сторон.

  2. Положитесь на консультативные сообщения ActiveMQ, чтобы обнаружить отсутствие прослушивателей.

  3. Настройте ActiveMQ, чтобы он был как можно более эффективным при отправке сообщений в очередь без прослушивателей (все еще, вероятно, требуется генерация сообщений).

Мне больше нравится идея № 1, но я 'У меня возникли проблемы с пониманием того, как это происходит вместе, без существенного увеличения сложности.

Ответы [ 2 ]

1 голос
/ 10 марта 2011

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

Однако, если бизнес-драйверы таковы, что вы все еще хотите, чтобы система A знала о потребителях, существует доступный вызов JMX, чтобы узнать количество потребителей в очереди или теме. Предполагая, что система A может выполнять вызовы jmx, вы можете запросить атрибут ConsumerCount в MBean Object org.apache.activemq: BrokerName = localhost, Type = Topic, Destination = (подставить собственное BrokerName и имя темы) через некоторый регулярный интервал, и если счет> 0, то создайте и отправьте сообщения в тему.

Я бы порекомендовал такой подход, поскольку он помещает все управление состояниями в ActiveMQ, а система A не должна управлять каким-либо состоянием.

0 голосов
/ 10 марта 2011

Консультативные сообщения могут дать вам такую ​​информацию, или вы также можете использовать BrokerStatisticsPlugin, который доступен в AMQ, он позволяет вашему клиенту отправлять сообщение и заставлять брокера посылать вам всякую приятную информацию о его текущем состоянии.Преимущество в том, что он немного проще в использовании, чем JMX.

См .: http://activemq.apache.org/statisticsplugin.html

Если вы хотите действительно независимое от брокера решение, которое вам, вероятно, придется использовать с вариантом № 1, так как другие полагаются на функции, специфичные для AMQ.

С уважением

Тим www.fusesource.com

...