ActiveMQ рассылка сообщений
Вопрос
У меня есть несколько серверов, которые производят XML-файлы из Python, и некоторые другие серверы, которые используют эти XML-файлы с использованием Java. Я только недавно изучил JMS и ActiveMQ и решил попробовать использовать его для передачи файлов XML. р>
Поэтому я настроил демоны ActiveMQ на серверах потребителей и решил, что на продуктах будет реализован некоторый метод циклического распределения для равномерного распределения xmls по потребителям.
Python -----------------------------> ActiveMQ ---> Java
\ /
\ /
---------------------------> ActiveMQ ---> Java
/ /
Python ----------------------------
Для тестирования я запустил одного производителя и одного потребителя и посмотрел результаты.
К моему удивлению, сообщения от производителя были распределены по всем серверам ActiveMQ в сети. Поскольку я запускал только одного потребителя, он получал только те xmls, которые получили демон ActiveMQ на этом компьютере, а остальные xmls терпеливо ожидали других демонов ActiveMQ на других машинах.
Python -----------------------------> ActiveMQ ---> Java (work)
|
|
ActiveMQ (xmls piling up)
РЕДАКТИРОВАТЬ: Это не то, что на самом деле произошло, извините. Подробнее см. Ниже
Теперь я не жалуюсь, так как это то, чего я хотел в любом случае, но я немного запутался: как правильно реализовать эту очередь «многие ко многим», к которой я стремлюсь?
Должен ли я также установить демоны ActiveMQ на своих машинах-производителях, отправить xmls на локальный ActiveMQs и доверять автоматическому обнаружению, чтобы получить xmls для потребителей?
Python ---> ActiveMQ ------------------------------ ActiveMQ ---> Java
| |
| |
| -- ActiveMQ ---> Java
| |
Python ---> ActiveMQ----------------------------
Должен ли я придерживаться своего первоначального плана и перебирать сообщения на компьютерах пользователей, просто чтобы быть в безопасности?
Или есть API, который я должен использовать, чтобы скрыть эти детали от моих процессов?
Кстати, производители - это процессы Python, использующие STOMP, а потребители - Java, использующие JMS.
Я прошу прощения, если твои глаза болят от моего дерьмового искусства ASCII, я не был уверен, достаточно ли я ясен только с помощью слов.
ИЗМЕНИТЬ
Очевидно, когда я запускал " один производитель и один потребитель " Я не заметил, что другие потребители уже работали. Они просто не делали ничего полезного с обработанными ими xmls. Вот почему я видел частичные результаты.
Прочитав немного больше и немного поэкспериментировав, я понял следующее:
По умолчанию ActiveMQ автоматически обнаруживает другие экземпляры ActiveMQ в локальной сети и создает хранилище и пересылку сеть брокеров . Это означает, что производитель может опубликовать xmls в любом экземпляре ActiveMQ, и они найдут свой путь к потребителям, которые прослушивают другие экземпляры ActiveMQ в той же сети. Р>
Обратите внимание, что в документации утверждается, что автоматическое обнаружение не рекомендуется для производственных установок.
Принятый ответ ниже все еще остается верным. Самый простой способ использовать ActiveMQ - это просто использовать один или два сервера в качестве & Quot; Queue Servers & Quot ;. Тем не менее, я решил придерживаться своего первоначального плана, потому что я думаю , что это сократит сетевой трафик (с промежуточным сервером xmls должен входить в него и выходить из него снова).
Решение
Ицэдок, я думаю, вы, вероятно, не рассматриваете использование сообщений правильно.
Наличие экземпляра MOM (будь то ActiveMQ, RabbitMQ или любого другого брокера MOM) в случае с одним пользователем не имеет смысла концептуально. Скорее, лучше думать о вашем брокере MOM как о маршрутизаторе сообщений.
В этом случае у вас будет один экземпляр брокера ActiveMQ (который может быть огражден или иным образом масштабирован, если у вас возникли проблемы с масштабированием, или реплицирован, если у вас есть соображения высокой доступности), к которому подключаются все производители и все потребители. Затем весь XML отправляется одному и тому же экземпляру посредника, и все потребители читают из одного экземпляра посредника. В этом случае брокер определит, к какому потребителю должно быть отправлено сообщение, основываясь на любой эвристике, которую он использует.
Это также означает, что вы можете динамически добавлять и удалять производителей и потребителей, и ничего не меняется: все они подключаются к одним и тем же брокерам, поэтому вы можете добавлять и удалять производителей и потребителей при изменении нагрузки или при сбое системы. р>