【问题标题】:Node.js Connection failing on connecting to RabbitMQ连接到 RabbitMQ 时 Node.js 连接失败
【发布时间】:2018-07-07 21:35:42
【问题描述】:

我有一个 node.js 应用程序要与 rabbitmq 和 mysql 一起运行。 设置好一切后,当我做npm start

我已将用户管理员标记和权限指定为 rabbitmqctl set_permissions RABBIT_USERNAME "." "." ".*"

它显示了这个错误:

> node app.js

13:43   
Started database log (Mon Jan 29 2018 13:43:42 GMT+0530 (IST))
13:43   
Started mailer log (Mon Jan 29 2018 13:43:44 GMT+0530 (IST))
13:43   
Started messaging log (Mon Jan 29 2018 13:43:44 GMT+0530 (IST))
13:43   
Started messaging log (Mon Jan 29 2018 13:43:44 GMT+0530 (IST))
13:43   
Started database log (Mon Jan 29 2018 13:43:44 GMT+0530 (IST))
13:43   
Started socket log (Mon Jan 29 2018 13:43:44 GMT+0530 (IST))
13:43   messaging:3000 is listening..
13:43   DB connected (7)
13:43   DB connected (6)
13:43   Error:



 Expected ConnectionOpenOk; got <ConnectionClose channel:0>
 Error: Expected ConnectionOpenOk; got <ConnectionClose channel:0>
    at /PATH/node_modules/amqplib/lib/connection.js:167:14
    at /PATH/node_modules/amqplib/lib/connection.js:159:12
    at Socket.recv (/PATH/node_modules/amqplib/lib/connection.js:497:12)
    at Object.onceWrapper (events.js:255:19)
    at Socket.emit (events.js:160:13)
    at emitReadable_ (_stream_readable.js:520:10)
    at emitReadable (_stream_readable.js:514:7)
    at addChunk (_stream_readable.js:280:7)
    at readableAddChunk (_stream_readable.js:256:11)
    at Socket.Readable.push (_stream_readable.js:213:10)
    at TCP.onread (net.js:599:20)

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! messaging@ start: `node app.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the messaging@ start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/mishal23/.npm/_logs/2018-01-29T08_13_45_095Z-debug.log

【问题讨论】:

  • 什么版本的 RabbitMQ?什么版本的节点?您是否在 RabbitMQ 日志中看到错误?您是否通过the tutorials 工作过?请提供您的代码(或至少是连接到 RabbitMQ 的部分)。我确信有一个简单的修复方法。

标签: mysql node.js rabbitmq


【解决方案1】:

没有足够的背景说明这是如何发生的,所以我做了一些假设:

  1. RabbitMQ 未安装在本地,它安装在某些服务器上。
  2. 您正在使用amqplib 进行连接。 (不是假设)
  3. 您尚未创建任何虚拟主机。

设置

因此,如果您还没有创建用户,那么您需要做的第一件事就是创建一个用户。

sudo rabbitmqctl add_user admin password
sudo rabbitmqctl set_user_tags admin administrator

如果您尚未启用管理仪表板,请运行此命令

sudo rabbitmq-plugins enable rabbitmq_management

默认情况下,它在端口15672 上运行。所以不要忘记打开那个端口。您可以使用your.server.ip.address:15672 访问此仪表板。

现在在此管理仪表板中,转到 Admin 选项卡,在右侧,您会看到指向 Virtual Hosts 的链接。

将有一个名为/ 和用户guest 的虚拟主机(没有本地主机您无法访问)。现在创建一个新的虚拟主机并检查它是否与您刚才创建的用户相同(在本例中为admin)。

连接到 RabbitMQ 服务器

使用下面的字符串代替amqp://localhost连接服务器

amqp://admin:password@your.server.ip.address/vhost_name

您可以使用this example(或任何其他示例)来处理其余的事情......

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

    转到rabbitmq仪表板>单击管理菜单>选择您要连接的用户>单击设置权限按钮>重新启动服务器

    【讨论】:

      【解决方案3】:

      就我而言,问题与心跳有关。您必须将心跳作为参数传递给您的连接 URL:

      amqps://user:password@domain/vhost_name?heartbeat=30
      

      【讨论】:

      • 非常感谢!这太奇怪了,但它也对我有用。很高兴我找到了你的答案!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多