我开始使用rabbit.js从node.js应用程序连接到RabbitMQ。
我被阻止了:
错误:服务器关闭通道:403(访问 - 拒绝),并显示消息“ACCESS_REFUSED - 默认交换机上不允许操作”
在Channel.C.accept(/.../rabbit.js/node_modules/amqplib/lib/channel.js:398:24)
在Connection.mainAccept [as accept](/.../rabbit.js/node_modules/amqplib/lib/connection.js:63:33)
在Socket.go(/.../rabbit.js/node_modules/amqplib/lib/connection.js:448:48)
在Socket.EventEmitter.emit(events.js:92:17)
...
这是预期的,因为我使用的RabbitMQ实例被配置为要求发布者和订阅者在能够使用消息队列之前提供凭据,并禁用来宾帐户。
The official documentation of rabbit.js没有提及凭据。 Google搜索“rabbit.js指定凭据”和“rabbit.js登录密码”尚无定论。
rabbit.js是否支持凭据?如果没有,node.js的其他RabbitMQ客户端是否支持它们?
答案 0 :(得分:39)
所以我自己从未使用过rabbit.js,但在深入研究代码后,它似乎正在使用amqplib。可以看到解析它的代码here,它似乎在调用标准nodejs URL module。所以也许你可以试试like this:
amqp://user:pass@host.com/vhost
希望它有所帮助!
干杯。
答案 1 :(得分:4)
RabbitMQ遵循 WHATWG URL标准,即:
amqp://user:pass@sub.example.com:8080
位置:
示例代码:
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://example.username:example.password@localhost', (err, conn) => {});
致谢
答案 2 :(得分:3)
const amqp = require('amqplib/callback_api');
const opt = { credentials: require('amqplib').credentials.plain('user', 'password') };
amqp.connect('amqp://localhost', opt, (err, conn) => {});
//
答案 3 :(得分:0)
密码中有一个'@'会引起问题(可能还会有其他类似的字符),因此,如@snakemw所建议的那样,凭据。平原方法会更好。
const opt = { credentials: require('amqplib').credentials.plain('user', 'password') };