Плагин RabbitMQ Shovel в кластере
У нас есть кластер 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 ответ
Кажется, это была ошибка конфигурации. Я протестировал плагин shovel вручную, и я должен был добавить конфигурации shovel в корневой ('/') виртуальный хост. По какой-то причине они не отображаются в консоли управления. С помощью
rabbitmqctl list_parameters
Я видел две дополнительные конфигурации лопаток на корневом виртуальном хосте. После сброса этих лопат соответствующие очереди также были удалены. Добавление лопаты, как описано в вопросе, добавило лопату и создало одну очередь. С тех пор сообщение пересылается только один раз.
Спасибо @Olivier за намеки на несколько лопат. Этот комментарий привел меня на правильный путь.