Можно ли перемещать/объединять сообщения между очередями RabbitMQ?

Я хочу узнать, можно ли перемещать/объединять сообщения из одной очереди в другую. Например:

main-queue содержит сообщения ['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5']

dog-queue содержит сообщения ['dog-1, dog-2, dog-3, dog-4]

Итак, вопрос в том, (при условии, что обе очереди находятся в одном кластере, vhost) можно ли перемещать сообщения из dog-queue в main-queue с помощью rabbitmqctl?

Итак, в конце я хочу получить что-то вроде:

Идеально:

main-queue : ['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5', dog-3, dog-4]

Но это тоже нормально:

main-queue : ['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5', 'dog-1, dog-2, dog-3, dog-4]


person Vor    schedule 12.06.2013    source источник
comment
Я думаю, вам, возможно, стоит заглянуть в тематические обмены   -  person robthewolf    schedule 13.06.2013


Ответы (1)


То, что вы ищете/ищете, это плагин 'shovel'. Плагин лопаты встроен в ядро, но вы должны явно включить его. Его действительно легко использовать, так как он делает все за вас (без ручного использования/перепубликации в другую очередь).

Включить плагин лопаты через cli:

sudo rabbitmq-plugins enable rabbitmq_shovel

Если вы управляете RabbitMQ через графический интерфейс, установите также плагин shovel mgmt:

sudo rabbitmq-plugins enable rabbitmq_shovel_management

Войдите в графический интерфейс, и вы увидите Shovel Management в разделе «Администратор». Вы можете создавать лопаты для перемещения сообщений из любой очереди в другую очередь, даже в удаленные очереди. Вы можете удалить лопату, когда она будет закончена, или оставить ее там, и она будет постоянно перемещать сообщения по мере их поступления.


Если вы управляете RabbitMQ через CLI, вы можете выполнить shovel непосредственно из rabbitmqctl:

sudo rabbitmqctl set_parameter shovel cats-and-dogs \
'{"src-uri": "amqp://user:pass@host/vhost", "src-queue": "dog-queue", \
"dest-uri": "amqp://user:pass@host/vhost", "dest-queue": "main-queue"}'

Официальная документация плагина:

Плагин Shovel — https://www.rabbitmq.com/shovel.html
Создание лопат — https://www.rabbitmq.com/shovel-dynamic.html

person rocksfrow    schedule 08.11.2014
comment
Большое спасибо, это здорово! - person Vor; 08.11.2014
comment
Это верно. Я не заметил, что это возможно через лопаты. Спасибо за правильный ответ и извините за неправильный ответ. - person pinepain; 11.11.2014
comment
Обратите внимание, вам не нужно включать плагин shovel на каждой машине, вы можете настроить его даже на какой-нибудь удаленной машине и иметь как исходный, так и целевой серверы, а также удаленные серверы. - person pinepain; 11.11.2014
comment
@rocksfrow, установка rabbitmq_management на всех узлах не обязательна. - person pinepain; 11.11.2014
comment
@zaq178miami zaq178miami Я обновил свой ответ и удалил примечание об установке плагина управления на каждом узле, хотя лично я по-прежнему считаю, что вам следует установить плагин на все ваши узлы, иначе вы потенциально столкнетесь с проблемами управления после сбоя узла. - person rocksfrow; 17.04.2015
comment
@rocksfrow или кто-нибудь из присутствующих, что из этого получится?? - person Anil Kumar; 23.07.2015
comment
Я пробовал это, но он не показывает никаких сообщений об успехе/неуспехе - person Anil Kumar; 23.07.2015
comment
Для дальнейшего использования. Я использую плагин, описанный @rocksfrow. У меня была проблема, когда моя функция Move с графическим интерфейсом администратора не работала, тогда я удалил созданную временную лопату и попытался снова, а со второй попытки она переместила элементы. - person John; 07.05.2018