Node.js 连接到 RabbitMQ 时失败

问题描述 投票:0回答:4

我有一个使用rabbitmq 和mysql 运行的node.js 应用程序。 设置完一切后,当我这样做时

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
mysql node.js rabbitmq
4个回答
15
投票

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

  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
(没有 localhost 就无法访问)。现在创建一个新的虚拟主机并检查它是否具有与您刚刚创建的用户相同的用户(在本例中为
admin
)。

连接到 RabbitMQ 服务器

使用下面的字符串连接到服务器,而不是

amqp://localhost

amqp://admin:[email protected]/vhost_name

您可以使用这个示例(或任何其他示例)来完成其余的事情...

我希望这有帮助!


3
投票

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


2
投票

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

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

0
投票

我遇到了同样的问题。我通过为rabbitmq用户提供虚拟主机的适当权限解决了这个问题。在我的例子中,用户是 admin,虚拟主机是 test_host

rabbitmqctl set_permissions -p /test_host admin ".*" ".*" ".*"
© www.soinside.com 2019 - 2024. All rights reserved.