Получить список обменов, привязок, очередей из RabbitMQ по NodeJS - PullRequest
0 голосов
/ 20 марта 2020

Иногда необходимо воссоздать привязки и очереди в RabbitMQ на NodeJS. Мне нужно распаковать, очистить и удалить их программно. Я могу сохранить то, что я делаю, и вернуться позже. Я использую amqplib. Это сбивает с толку, что он не предоставляет функциональность, которая может перечислить их. http://www.squaremobius.net/amqp.node/channel_api.html Возможно ли это? В чем причина его отсутствия?

1 Ответ

0 голосов
/ 26 марта 2020

amqplib не поддерживает получение списка обменов, привязок и очередей из RabbitMQ, поскольку это не является частью протокола AMQP.

RabbitMQ предоставляет плагин управления , который включает в себя HTTP на основе API. В качестве альтернативы вы можете хранить список обменов, очередей и привязок отдельно и использовать узел для их утверждения, однако вы все равно не сможете утверждать vhosts, пользователей и политики с помощью amqplib. Вместо этого вам придется установить ранее упомянутый плагин управления и использовать HTTP.

Такие библиотеки, как Rascal (заявление об отказе от ответственности - я автор) также предоставляют ограниченную функциональность для автоматического создания объектов RabbitMQ. Rascal может быть настроен на утверждение vhosts (используя http), обменов, очередей и привязок (используя amqplib) при запуске приложения, но не будет удалять дополнительные объекты и в настоящее время не может создавать пользователей или политики.

Другим вариантом является резервное копирование и восстановление всей конфигурации RabbitMQ. Для этого я использовал только интерфейс управления, но он может поддерживаться HTTP API. Однако снова это не приведет к удалению объектов, которые были добавлены после резервного копирования.

Для полноты вы можете использовать инструменты командной строки RabbitMQ для подтверждения конфигурации. Такие инструменты, как Puppet, Chef и Ansible, часто используются для автоматизации этого, но, учитывая, что вы спросили об узле / amqplib, я предполагаю, что это неприемлемо.

Любая попытка переопределить существующий объект (например, изменение тип обмена или добавление различных x-атрибутов в очереди) с использованием любого из указанных выше методов завершится неудачей.

...