Статьи

ActiveMQ — сеть брокеров объяснила

Задача

Эта серия из 7 статей посвящена тому, как создать сеть брокеров ActiveMQ для обеспечения высокой доступности и масштабируемости.

Почему сеть брокеров?

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

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

Часто приложения, работающие в географически распределенных центрах обработки данных, должны координировать сообщения. Работа производителей и потребителей сообщений в географических регионах / центрах обработки данных может быть лучше спроектирована с использованием сети брокеров.

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

Сетевой соединитель — это мост между двумя брокерами, который позволяет пересылать сообщения по требованию.

Другими словами, если Брокер B1 инициирует сетевой соединитель с Брокером B2, тогда сообщения в канале (очереди / теме) в B1 перенаправляются в B2, если для того же канала в B2 есть хотя бы один потребитель. Если сетевой соединитель был настроен для дуплекса, сообщения передаются от B2 до B1 по требованию.

Это очень интересно, потому что теперь брокеры могут динамически общаться друг с другом.

В этой серии из 7 статей мы рассмотрим следующие темы, чтобы понять эту очень мощную функцию ActiveMQ:

    1. Основы сетевого разъема — часть 1
    2. Дуплексные сетевые разъемы. Часть 2
    3. Балансировка нагрузки потребителей на локальных / удаленных брокерах. Часть 3
    4. Балансировка нагрузки потребителей / подписчиков на удаленных брокерах
      1. Очередь: балансировка нагрузки удаленных одновременных потребителей. Часть 4
      2. Тема: Надежные подписки с балансировкой нагрузки на удаленных брокерах. Часть 5
    5. Хранение / пересылка сообщений и аварийное переключение потребителей — часть 6
      1. Как предотвратить зависание сообщений
    6. Виртуальные направления — часть 7

Чтобы отдать должное, где это необходимо, следующие URL помогли мне в создании этой серии постов в блоге.

  1. Расширенный обмен сообщениями с ActiveMQ от Dejan Bosanac [Слайды 32-36]
  2. Понимание Брокерских сетей ActiveMQ от Якуба Кораба

Предпосылки

  1. ActiveMQ 5.8.0 — для создания экземпляров брокера
  2. 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
    1. Заменить транспортный разъем на 61626 с 61616
    2. Измените порт AMQP с 5672 на 6672 (не буду использовать его для этого блога)
  • редактировать
    1
    /Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-2/conf/jetty.xml
    1. Измените порт веб-консоли на 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

брокер-1-НЦ

То же самое на 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

брокерско-1-100msgs производства

Давайте запустим потребителя в очереди с именем «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

брокерско-1-100msgs-потребленный

Консоль администрирования broker-2 @ http: // localhost: 9161 / admin / queues.jsp показывает, что запущенный нами потребитель использовал все 100 сообщений, которые были перенаправлены по запросу от broker-1

брокер-2-Dequeue

Сведения о пользователе broker-2 в очереди foo.bar

брокер-2-потребительские детали

Консоль администратора broker-1 показывает, что все 100 сообщений были исключены из очереди [перенаправлены в broker-2 через сетевой соединитель].

брокер-1-пс-очередь потребитель

Сведения о потребителе broker-1 в очереди «foo.bar» показывают, что потребитель создается по требованию: [имя соединителя] _ [целевой посредник] _inbound_

брокер-1-пс-потребительские детали

Таким образом, мы увидели основы сетевого разъема в ActiveMQ.

Оставайтесь с нами для части 2 …

Ссылка: ActiveMQ — сеть брокеров Объяснено от нашего партнера JCG Ашвини Кунтамуккала в