Задача
Эта серия из 7 статей посвящена тому, как создать сеть брокеров ActiveMQ для обеспечения высокой доступности и масштабируемости.
Почему сеть брокеров?
Брокер сообщений ActiveMQ является основным компонентом инфраструктуры обмена сообщениями на предприятии. Он должен быть высокодоступным и динамически масштабируемым, чтобы облегчить связь между динамически разнородными распределенными приложениями, которые имеют различные потребности в емкости.
Масштабирование корпоративных приложений на обычном оборудовании в настоящее время является модным явлением. ActiveMQ отлично справляется с этой задачей, имея возможность создать сеть брокеров, чтобы распределить нагрузку.
Часто приложения, работающие в географически распределенных центрах обработки данных, должны координировать сообщения. Работа производителей и потребителей сообщений в географических регионах / центрах обработки данных может быть лучше спроектирована с использованием сети брокеров.
ActiveMQ использует транспортные соединители, через которые он связывается с производителями и потребителями сообщений. Однако для облегчения взаимодействия между брокером ActiveMQ использует сетевые соединители .
Сетевой соединитель — это мост между двумя брокерами, который позволяет пересылать сообщения по требованию.
Другими словами, если Брокер B1 инициирует сетевой соединитель с Брокером B2, тогда сообщения в канале (очереди / теме) в B1 перенаправляются в B2, если для того же канала в B2 есть хотя бы один потребитель. Если сетевой соединитель был настроен для дуплекса, сообщения передаются от B2 до B1 по требованию.
Это очень интересно, потому что теперь брокеры могут динамически общаться друг с другом.
В этой серии из 7 статей мы рассмотрим следующие темы, чтобы понять эту очень мощную функцию ActiveMQ:
- Основы сетевого разъема — часть 1
- Дуплексные сетевые разъемы. Часть 2
- Балансировка нагрузки потребителей на локальных / удаленных брокерах. Часть 3
- Балансировка нагрузки потребителей / подписчиков на удаленных брокерах
- Очередь: балансировка нагрузки удаленных одновременных потребителей. Часть 4
- Тема: Надежные подписки с балансировкой нагрузки на удаленных брокерах. Часть 5
- Хранение / пересылка сообщений и аварийное переключение потребителей — часть 6
- Как предотвратить зависание сообщений
- Виртуальные направления — часть 7
Чтобы отдать должное, где это необходимо, следующие URL помогли мне в создании этой серии постов в блоге.
- Расширенный обмен сообщениями с ActiveMQ от Dejan Bosanac [Слайды 32-36]
- Понимание Брокерских сетей ActiveMQ от Якуба Кораба
Предпосылки
- ActiveMQ 5.8.0 — для создания экземпляров брокера
- Apache Ant — для запуска примера производителя и потребителей ActiveMQ для демонстрации.
Мы будем использовать несколько экземпляров ActiveMQ-брокеров на одном компьютере для упрощения демонстрации.
Основы сетевого разъема — часть 1
На следующем рисунке показано, как функционирует сетевой разъем. Он соединяет двух брокеров и используется для пересылки сообщений от Брокера-1 к Брокеру-2 по требованию, если он установлен Брокером-1 в Брокер-2.
Сетевой соединитель может быть дуплексным, поэтому сообщения могут пересылаться в противоположном направлении; от Broker-2 до Broker-1, когда на Broker-1 есть потребитель для канала, который существует в Broker-2. Подробнее об этом в части 2
Настройка сетевого коннектора между брокером-1 и брокером-2
- Создайте два экземпляра брокера, скажем, broker-1 и broker-2
1
2
3
|
Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd /Users/akuntamukkala/apache-activemq-5 .8.0 /bin Ashwinis-MacBook-Pro:bin akuntamukkala$ . /activemq-admin create .. /bridge-demo/broker-1 |
1
|
Ashwinis-MacBook-Pro:bin akuntamukkala$ . /activemq-admin create .. /bridge-demo/broker-2 |
Поскольку оба брокера будут работать на одном компьютере, давайте настроим broker-2 таким образом, чтобы не было конфликтов портов.
- редактировать
1
/Users/akuntamukkala/apache-activemq-5
.8.0
/bridge-demo/broker-2/conf/activemq
.xml
- Заменить транспортный разъем на 61626 с 61616
- Измените порт AMQP с 5672 на 6672 (не буду использовать его для этого блога)
- редактировать
1
/Users/akuntamukkala/apache-activemq-5
.8.0
/bridge-demo/broker-2/conf/jetty
.xml
- Измените порт веб-консоли на 9161 с 8161
- Настройка сетевого коннектора от брокера-1 к брокеру-2
Добавьте следующий фрагмент XML в1/Users/akuntamukkala/apache-activemq-5
.8.0
/bridge-demo/broker-1/conf/activemq
.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
networkConnectors> < networkConnector name="T:broker1->broker2" uri="static:(tcp://localhost:61626)" duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2" dynamicOnly="true"> < excludedDestinations > < queue physicalName=">" /> </ excludedDestinations > </ networkConnector > < networkConnector name="Q:broker1->broker2" uri="static:(tcp://localhost:61626)" duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2" dynamicOnly="true"> < excludedDestinations > < topic physicalName=">" /> </ excludedDestinations > </ networkConnector > </ networkConnectors > |
Приведенный выше фрагмент XML-кода настраивает два сетевых соединителя: «T: broker1-> broker2» (исключаются только темы, поскольку очереди) и «Q: broker1-> broker2» (исключаются только очереди как темы). Это обеспечивает хорошее разделение между сетевыми разъемами, используемыми для тем и очередей.
Имя может быть произвольным, хотя я предпочитаю указывать [тип]: -> [целевой брокер].
Атрибут URI указывает, как подключиться к broker-2.
- Старт брокер-2
1
2
|
Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd /Users/akuntamukkala/apache-activemq-5 .8.0 /bridge-demo/broker-2/bin |
1
|
Ashwinis-MacBook-Pro:bin akuntamukkala$ . /broker-2 console |
- Старт брокер-1
1
2
|
Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd /Users/akuntamukkala/apache-activemq-5 .8.0 /bridge-demo/broker-1/bin |
1
|
Ashwinis-MacBook-Pro:bin akuntamukkala$ . /broker-1 console |
Журналы на брокере-1 показывают, что 2 сетевых коннектора устанавливаются с брокером-2
1
2
3
4
5
|
INFO | Establishing network connection from vm: //broker-1 ?async= false &network= true to tcp: //localhost :61626 INFO | Connector vm: //broker-1 Started INFO | Establishing network connection from vm: //broker-1 ?async= false &network= true to tcp: //localhost :61626 INFO | Network connection between vm: //broker-1 #24 and tcp://localhost/127.0.0.1:61626@52132(broker-2) has been established. INFO | Network connection between vm: //broker-1 #26 and tcp://localhost/127.0.0.1:61626@52133(broker-2) has been established. |
Веб-консоль на broker-1 @ http: // localhost: 8161 / admin / connections.jsp показывает два сетевых соединителя, установленных для broker-2
То же самое на broker-2 не показывает никаких сетевых соединителей, так как никакие сетевые соединители не были инициированы broker-2
Давайте посмотрим это в действии
Давайте создадим 100 постоянных сообщений в очереди с именем «foo.bar» на broker-1.
1
2
3
|
Ashwinis-MacBook-Pro:example akuntamukkala$ pwd /Users/akuntamukkala/apache-activemq-5 .8.0 /example Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp: //localhost :61616 -Dtopic= false -Ddurable= true -Dsubject=foo.bar -Dmax=100 |
Веб-консоль broker-1 показывает, что 100 сообщений были помещены в очередь в очереди «foo.bar»
HTTP: // локальный: 8161 / администратор / queues.jsp
Давайте запустим потребителя в очереди с именем «foo.bar» на broker-2. Здесь важно отметить, что имя назначения «foo.bar» должно точно совпадать.
1
|
Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp: //localhost :61626 -Dtopic= false -Dsubject=foo.bar |
Мы находим, что все 100 сообщений из очереди foo.bar брокера-1 перенаправляются потребителю очереди foo.bar брокера-2.
консоль администратора broker-1 по адресу http: // localhost: 8161 / admin / queues.jsp
Консоль администрирования broker-2 @ http: // localhost: 9161 / admin / queues.jsp показывает, что запущенный нами потребитель использовал все 100 сообщений, которые были перенаправлены по запросу от broker-1
Сведения о пользователе broker-2 в очереди foo.bar
Консоль администратора broker-1 показывает, что все 100 сообщений были исключены из очереди [перенаправлены в broker-2 через сетевой соединитель].
Сведения о потребителе broker-1 в очереди «foo.bar» показывают, что потребитель создается по требованию: [имя соединителя] _ [целевой посредник] _inbound_
Таким образом, мы увидели основы сетевого разъема в ActiveMQ.
Оставайтесь с нами для части 2 …
Ссылка: | ActiveMQ — сеть брокеров Объяснено от нашего партнера JCG Ашвини Кунтамуккала в |