客户端无法连接到远程 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 或实例名称,一切都像魔术一样。
我运行在机器 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 或实例名称,一切都像魔术一样。