Плагин RabbitMQ Shovel в кластере - PullRequest
0 голосов
/ 05 февраля 2019

У нас есть кластер RabbitMQ с тремя настроенными узлами.Каждый узел имеет два виртуальных хоста (Vhost-A и Vhost-B).Нам нужна возможность перемещать сообщения из Vhost-A в Vhost-B.Для этого мы настроили лопату, направляющую сообщения от Exchange-1 на Vhost-A к Exchange-2 на Vhost-B.

rabbitmqctl -p Vhost-A set_parameter shovel shovel-exchange-1-to-vhost-b /
  '{"src-uri": "amqp://user@/Vhost-A", "src-exchange": "Exchange-1", /
    "src-exchange-key": "#", "dest-uri": "amqp://user@/Vhost-B", /
    "dest-exchange": "Exchange-2", "add-forward-headers": false, /
    "ack-mode": "on-confirm", "delete-after": "never"}'

Это имеет побочный эффект репликации сообщений на целевой Exchange-2.Это означает, что тестовая очередь, которую мы привязали к Exchange-2 на Vhost-B, получает одно и то же сообщение три раза (по одному от каждого узла кластера).

Как мы можем предотвратить это?Требуется ли изменение конфигурации лопатки или конфигурации кластера?

Версия RabbitMQ: 3.6.15

ОБНОВЛЕНИЕ 1:

У нас есть две исключительные очереди, которые не могут бытьудалены, потому что они заблокированы.Эти очереди исчезают, когда мы отключаем плагин на всех узлах кластера.Как только мы повторно активируем плагин на одном узле, очереди создаются снова.

1 Ответ

0 голосов
/ 05 февраля 2019

Кажется, произошла ошибка конфигурации.Я протестировал плагин shovel вручную, и я должен был добавить конфигурации shovel в корневой ('/') виртуальный хост.По какой-то причине они не отображаются в консоли управления.Используя

rabbitmqctl list_parameters

, я увидел две дополнительные конфигурации лопаток на корневом виртуальном хосте.После сброса этих лопат соответствующие очереди также были удалены.Добавление лопаты, как описано в вопросе, добавило лопату и создало одну очередь.С тех пор сообщение пересылается только один раз.

Спасибо, @Olivier, за намеки на несколько лопат.Этот комментарий привел меня на правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...