【问题标题】:Get a list of exchanges, bindings, queues from RabbitMQ by NodeJS通过 NodeJS 从 RabbitMQ 获取交换、绑定、队列的列表
【发布时间】:2020-07-01 10:36:58
【问题描述】:
【问题讨论】:
标签:
node.js
rabbitmq
node-amqplib
【解决方案1】:
amqplib 不支持从 RabbitMQ 获取交换、绑定和队列的列表,因为这不是 AMQP 协议的一部分。
RabbitMQ 确实提供了一个management plugin,其中包括一个基于 HTTP 的 API。或者,您可以单独维护交换、队列和绑定的列表,并使用节点来声明这些,但是您仍然无法使用 amqplib 声明虚拟主机、用户和策略。相反,您必须安装前面提到的管理插件并使用 HTTP。
像Rascal(免责声明 - 我是作者)这样的库也确实提供了有限的功能来自动创建 RabbitMQ 对象。 Rascal 可以配置为在应用程序启动时断言 vhosts(使用 http)、交换、队列和绑定(使用 amqplib),但不会删除额外的对象,目前无法创建用户或策略。
另一个选项是备份和恢复 RabbitMQ 的整个配置。我只使用管理 UI 来执行此操作,但 HTTP API 可能支持它。但是,这再次不会删除备份后添加的对象。
为了完整起见,您可以使用 RabbitMQ 命令行工具来断言配置。 Puppet、Chef 和 Ansible 等工具经常用于自动执行此操作,但考虑到您询问 node/amqplib,我认为这是不可接受的。
使用上述任何方法重新定义现有对象(例如更改交换类型或向队列添加不同的 x 属性)的任何尝试都将失败。