【问题标题】:Can I specify RabbitMQ credentials in node.js?我可以在 node.js 中指定 RabbitMQ 凭据吗?
【发布时间】:2014-09-16 16:21:19
【问题描述】:

我开始使用 rabbit.js 从 node.js 应用程序连接到 RabbitMQ。

我被阻止了:

错误:服务器关闭频道:403 (ACCESS-REFUSED) 并显示消息“ACCESS_REFUSED - 在默认交换机上不允许操作”
在 Channel.C.accept (/.../rabbit.js/node_modules/amqplib/lib/channel.js:398:24)
在 Connection.mainAccept [作为接受] (/.../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 是否支持凭据?如果没有,还有哪些其他 RabbitMQ 的 node.js 客户端支持它们?

【问题讨论】:

    标签: node.js rabbitmq


    【解决方案1】:

    所以我自己从来没有使用过rabbit.js,但是在深入研究代码之后,它似乎在使用amqplib。可以看到解析它的代码here,它似乎正在调用标准的nodejs URL module。所以也许你可以试试like this

    amqp://user:pass@host.com/vhost
    

    希望对你有帮助!

    干杯。

    【讨论】:

    • 通常,连接字符串中的字段必须经过 URL 编码(%20 等),但看起来模块无法正确处理。即使正确编码,密码中至少有一个: 也会导致错误。避免在密码字段中使用特殊的 http 字符,例如 /.:?
    • 我只是在深入研究代码,这确实是 has been fixed 在 2017 年晚些时候出现的错误 :-)
    【解决方案2】:
    const amqp = require('amqplib/callback_api');
    
    const opt = { credentials: require('amqplib').credentials.plain('user', 'password') };
    amqp.connect('amqp://localhost', opt, (err, conn) => {});
    
    //
    

    【讨论】:

      【解决方案3】:

      RabbitMQ 遵循 WHATWG URL 标准,即它需要:

      amqp://user:pass@sub.example.com:8080
      

      地点:

      • 用户:用户名
      • 密码:密码
      • sub.example.com:8080: 主机:端口

      示例代码:

      var amqp = require('amqplib/callback_api');
      
      amqp.connect('amqp://example.username:example.password@localhost', (err, conn) => {});
      

      问候

      【讨论】:

        【解决方案4】:

        密码中包含“@”会导致问题(也可能存在其他此类字符),因此,@snakemw 建议的 credentials.plain 方法更好

        const opt = { credentials: require('amqplib').credentials.plain('user', 'password') };
        

        【讨论】:

          猜你喜欢
          • 2019-11-10
          • 2021-12-07
          • 1970-01-01
          • 2010-09-16
          • 2012-01-22
          • 2013-04-03
          • 2017-09-25
          • 1970-01-01
          相关资源
          最近更新 更多