1

有时需要通过 NodeJS 在 RabbitMQ 上重新创建绑定和队列。我需要以编程方式解除绑定、清除和删除它们。我可以保存我所做的并在以后恢复。我使用 amqplib。它混淆了它不提供可以列出它们的功能。http://www.squaremobius.net/amqp.node/channel_api.html 有可能吗?它不存在的原因是什么?

4

1 回答 1

2

amqplib 不支持从 RabbitMQ 获取交换、绑定和队列的列表,因为这不是 AMQP 协议的一部分。

RabbitMQ 确实提供了一个管理插件,其中包括一个基于 HTTP 的 API。或者,您可以单独维护交换、队列和绑定的列表,并使用节点来声明这些,但是您仍然无法使用 amqplib 声明虚拟主机、用户和策略。相反,您必须安装前面提到的管理插件并使用 HTTP。

Rascal之类的库(免责声明 - 我是作者)也确实提供了有限的功能来自动创建 RabbitMQ 对象。Rascal 可以配置为在应用程序启动时断言虚拟主机(使用 http)、交换、队列和绑定(使用 amqplib),但不会删除额外的对象,目前无法创建用户或策略。

另一种选择是备份和恢复 RabbitMQ 的整个配置。我只使用了管理 UI 来执行此操作,但 HTTP API 可能支持它。但是,这再次不会删除备份后添加的对象。

为了完整起见,您可以使用 RabbitMQ 命令行工具来断言配置。Puppet、Chef 和 A​​nsible 等工具经常用于自动执行此操作,但考虑到您询问 node/amqplib,我认为这是不可接受的。

使用上述任何方法重新定义现有对象(例如更改交换类型或向队列添加不同的 x 属性)的任何尝试都将失败。

于 2020-03-26T20:21:04.980 回答