我发现 Connection Rest by Peer 错误,并假设 RabbitMQ 没有侦听该端口或有防火墙阻止它。事实并非如此。
在 Ubuntu 16.04.2 LTS 上运行 RabbitMQ,由 apt 安装的版本:3.5.7-1ubuntu0.16.04.1
Rabbit 端口 5672 的“netstat -a”输出如下:
$ netstat -a|grep -i amqp
tcp6 0 0 [::]:amqp [::]:* LISTEN
然而,Rabbit 实际上同时监听 IPv4 地址和 IPv6 地址。我用netcat验证了这一点。
要从另一台计算机访问 Rabbit,您必须使用如下命令设置用户帐户:
sudo rabbitmqctl add_user celery celerypassword
sudo rabbitmqctl add_vhost celery_vhost
sudo rabbitmqctl set_user_tags celery celerytag
sudo rabbitmqctl set_permissions -p celery_vhost celery .* .* .*
问题是我的网址。我的看起来像:
BROKER_URL = 'amqp://celery:[email protected] /cdn-cgi/l/email-protection//'
倒数第二个正斜杠之后是虚拟主机的名称。上面,我将我的虚拟主机命名为 celery_vhost。要连接,我需要将 URL 更改为:
BROKER_URL = 'amqp://celery:[email protected] /cdn-cgi/l/email-protection/celery_vhost'
我在查看 /var/log/rabbitmq 中的 Rabbit 日志时发现了这一点。当我输入错误的 URL 时,有一个 .log 文件包含以下错误:
{handshake_error,opening,0,
{amqp_error,access_refused,
"access to vhost '/' refused for user 'celery'",
'connection.open'}}