客户端无法连接到远程 Rabbitmq 服务器

Client cannot Connect to Remote Rabbitmq Server

我运行在机器 A 上安装了一个 Rabbitmq 服务器,可以将任务放入消息队列中。机器 B 应该连接到机器 A 上的 AMQP 服务器并执行任务。我的 rabbitmq-env.conf 设置是:

NODE_IP_ADDRESS=
NODE_PORT=5672

我可以本地连接到机器A上的服务器。当运行nmap -p 5672 localhost。它显示:

Nmap scan report for localhost (127.0.0.1)
Host is up (0.000094s latency).
PORT     STATE SERVICE
5672/tcp open  amqp

但是在机器 B 上,当 运行ning Celery worker 时,它说:

consumer: Cannot connect to amqp://myuser:**@{server_IP}:5672/myvhost: timed out.

nmap -p 5672 {server_IP} 显示:

Host is up (0.0013s latency).
PORT     STATE    SERVICE
5672/tcp filtered amqp

我可以确定我在 Celery 中的 Broker url 设置是正确的,而且我没有为 rabbitmq 使用访客帐户。

我的服务器状态显示:

[{pid,2580},
 {running_applications,[{rabbit,"RabbitMQ","3.2.4"},
                        {os_mon,"CPO  CXC 138 46","2.2.14"},
                        {xmerl,"XML parser","1.3.5"},
                        {mnesia,"MNESIA  CXC 138 12","4.11"},
                        {sasl,"SASL  CXC 138 11","2.3.4"},
                        {stdlib,"ERTS  CXC 138 10","1.19.4"},
                        {kernel,"ERTS  CXC 138 10","2.16.4"}]},
 {os,{unix,linux}},
 {erlang_version,"Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:30] [kernel-poll:true]\n"},
 {memory,[{total,40419400},
          {connection_procs,205272},
          {queue_procs,60240},
          {plugins,0},
          {other_proc,13473800},
          {mnesia,75128},
          {mgmt_db,0},
          {msg_index,30440},
          {other_ets,748888},
          {binary,5264592},
          {code,16522377},
          {atom,594537},
          {other_system,3444126}]},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,1552420044},
 {disk_free_limit,50000000},
 {disk_free,6313250816},
 {file_descriptors,[{total_limit,924},
                    {total_used,7},
                    {sockets_limit,829},
                    {sockets_used,3}]},
 {processes,[{limit,1048576},{used,153}]},
 {run_queue,0},
 {uptime,8}]
...done.

机器A和机器B都是Google同一个项目下的Compute Engine虚拟机。任何输入将不胜感激。非常感谢。

原来是安全问题。 Rabbitmq 默认监听所有 Internet 接口并允许远程连接,只要使用的帐户不是 guest。对于 GCE 实例之间的连接,应使用内部 IP 地址或简单的实例名称。默认情况下允许内部连接。但是 google 禁止外部的。所以只需将 'server_IP' 更改为内部 IP 或实例名称,一切都像魔术一样。