Статьи

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

В предыдущей части 4 мы видели, как балансировать нагрузку удаленных потребителей в очереди, используя сетевые разъемы.

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

part-5-lb-rcc - Новая страница
Рисунок 1: Сеть брокеров — баланс нагрузки подписчиков по теме

Как показано выше, у нас есть Broker-1, который инициирует два сетевых разъема для Broker-2 и Broker-3. Производитель отправляет сообщения в тему «moo.bar» на Broker-1, в то время как Broker-2 имеет подписчика C1, а Broker-3 имеет двух подписчиков C2 и C3 на одну и ту же тему «moo.bar».

Вы можете заметить, что эта установка очень похожа на часть 4 . Разница лишь в том, что здесь мы имеем дело с темами, а в части 4 мы имели дело с очередями.

Давайте посмотрим это в действии

  1. Добавьте следующую конфигурацию сетевого коннектора в файл конфигурации activemq.xml Broker-1:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      <networkConnectors>
    <networkConnector
    name="T:broker1->broker2"
    uri="static:(tcp://localhost:61626)"
    duplex="false"
    decreaseNetworkConsumerPriority="false"
    networkTTL="2"
    conduitSubscriptions="false"
    dynamicOnly="true">
    <excludedDestinations>
    <queue physicalName=">" />
    </excludedDestinations>
    </networkConnector>
    <networkConnector
    name="T:broker1->broker3"
    uri="static:(tcp://localhost:61636)"
    duplex="false"
    decreaseNetworkConsumerPriority="false"
    networkTTL="2"
    conduitSubscriptions="false"
    dynamicOnly="true">
    <excludedDestinations>
    <queue physicalName=">" />
    </excludedDestinations>
    </networkConnector>
    </networkConnectors>
  2. Давайте начнем с брокера-2, брокера-3 и брокера-1 в таком порядке.
  3. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-2/bin$ ./broker-2 console
  4. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-3/bin$ ./broker-3 console
  5. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-1/bin$ ./broker-1 console
  6. Соединения консоли администратора Broker-1 показывают, что два сетевых соединителя были установлены в соответствии с настройками от Broker-1 до Broker-2 и Broker-3 соответственно:
  7. брокер-1-соединение
    Соединения Брокера-1 @ http: // localhost: 8161 / admin / connections.jsp

  8. Давайте запустим подписчика C1 на Broker-2, подписавшегося на сообщения в теме «moo.bar», и подписчиков C2 и C3 на Broker-3, подписавшегося на сообщения в той же теме «moo.bar».
  9. Для постоянных подписчиков требуется уникальная комбинация идентификатора клиента и имени подписчика. Для того чтобы мы могли создать надежных подписчиков C2 и C3, нам нужно улучшить функциональность, представленную в /Users/akuntamukkala/apache-activemq-5.8.0/example/src/ConsumerTool.java где /Users/akuntamukkala/apache-activemq-5.8 .0 это каталог, в котором установлен ActiveMQ.
  10. Измененный код состоит из редактирования build.xml и ConsumerTool.java для добавления нового параметра «subscriberName». Отредактированные файлы build.xml и ConsumerTool.java можно получить здесь и здесь соответственно.
  11. Давайте начнем подписчиков сейчас.
  12. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/example$ <b>ant consumer -Durl=tcp://localhost:61626 -Dtopic=true -Dsubject=moo.bar -DclientId=C1 -Ddurable=true -DsubscriberName=mb.C1</b>
  13. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/example$ <b>ant consumer -Durl=tcp://localhost:61636 -Dtopic=true -Dsubject=moo.bar -DclientId=C2 -Ddurable=true -DsubscriberName=mb.C2</b>
  14. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/example$ <b>ant consumer -Durl=tcp://localhost:61636 -Dtopic=true -Dsubject=moo.bar -DclientId=C3 -Ddurable=true -DsubscriberName=mb.C3</b>
  15. Долговечный абонент на Брокер-2:

    брокер-2-долговечные-абонентов
    HTTP: // локальный: 9161 / администратор / subscribers.jsp

  16. Долгосрочные подписчики на Брокер-3:

    брокер-3-долговечные-абонентов
    HTTP: // локальный: 10161 / администратор / subscribers.jsp

  17. Постоянные подписчики на Брокер-1 (из-за сетевых разъемов):

    HTTP: // локальный: 8161 / администратор / subscribers.jsp

  18. Теперь давайте отправим 10 долговременных сообщений в тему moo.bar на Broker-1.
  19. 1
    akuntamukkala@localhost~/apache-activemq-5.8.0/example$ <b>ant producer -Durl=tcp://localhost:61616 -Dtopic=true -Dsubject=moo.bar -Dmax=10 -Ddurable=true</b>
  20. Смотрите консоль на Broker-3:

    брокерско-3-дубликат-сообщ-предупреждение
    Вывод файла журнала на Broker-3

  21. Как вы можете заметить, Broker-3 получает одно и то же сообщение дважды, по одному на каждую подписку C2 и C3. ActiveMQ по умолчанию не разрешает обработку дублирующихся сообщений.
  22. Это происходит потому, что подписки mb.C2 и mb.C3 на Broker-3 распространяются на Broker-1. Поэтому, когда 10 сообщений публикуются на moo.bar на Broker-1, эти сообщения отправляются подписчикам mb.C2 и mb.C3 на одном и том же брокере: Broker-3. Поскольку сообщения имеют одинаковый идентификатор, повторяющиеся сообщения отбрасываются и, следовательно, предупреждение отображается в сообщениях журнала… (показано на шаге 19).
  23. Вот консоль, показывающая статистику по Broker-1:

    брокер-1-статистика
    HTTP: // локальный: 8161 / администратор / subscribers.jsp

  24. Вот консоль, отображающая статистику по Broker-3:

    брокерско-3-статистика
    HTTP: // локальный: 10161 / администратор / subscribers.jsp

  25. Как вы можете видеть, несмотря на то, что счетчик очереди показывает 20, счетчик очереди показывает только 10, так как остальные 10 сообщений были удалены Брокером-3. Это полезная функция, которая помогает гарантировать, что сообщение обрабатывается брокером не более одного раза.

Причина, по которой это происходит, заключается в том, что обе подписки C2 и C3 распространяются на вышестоящего брокера Broker-1.

брокерско-3-дубликат-сообщ-предупреждение1
Дубликаты сообщений на брокере-3

Давайте попробуем повторить тот же сценарий, используя небольшую настройку в настройках сетевого разъема, установив значение wireitSubscription = «true».
на обоих сетевых разъемах от Broker-1 до Broker-2 и Broker-3 соответственно. После перезапуска брокеров удалите неактивных постоянных подписчиков и повторите описанные выше шаги.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  <networkConnectors>
<networkConnector
name="T:broker1->broker2"
uri="static:(tcp://localhost:61626)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="true"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector
name="T:broker1->broker3"
uri="static:(tcp://localhost:61636)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="true"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors>

На следующем снимке экрана показано, что брокер-1 теперь видит только двух постоянных подписчиков, по одному от каждого брокера, брокер-2 и брокер-3.

брокер-1-CS-верно
Долгосрочные подписчики в Брокере-1, если для WireitSubscription = «true»

После публикации 10 долговременных сообщений в Broker-1 мы обнаруживаем, что на этот раз у нас не возникает повторяющихся сообщений.

Как и ожидалось, все 10 сообщений обрабатываются C1, C2 и C3, как показано на скриншотах ниже.

брокер-1-MSG-обработанный
Брокер-1 по тематике подписчиков

брокер-3-тзд обработанный
Абоненты долгосрочных тем Broker-3 C2 и C3 получают и обрабатывают 10 сообщений каждое

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

В следующей части 6 мы увидим, как ActiveMQ предоставляет возможности «воспроизведения сообщений» для предотвращения застревания сценариев сообщений.

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