我在Windows 2008 R2上使用Erlang OTP 17.1运行RabbitMQ v3.3.5。 我的Dev和QA环境是独立的。 我的分段和生产环境是集群的。
我发现这个问题经常发生在RabbitMQ服务正在运行的地方,RabbitMQpipe理控制台正在看到所有的东西,但是当我尝试从命令行运行rabbitmqctl时,它会失败,并报告节点已closures(尝试在本地和远程服务器)。
如果我重新启动Windows服务,则会解决此问题。
我在RabbitMQ错误日志中看不到错误消息。 最后一条消息表明节点已经启动。
以下是我最近在分段窗口集群的节点2上遇到的问题的输出示例:
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status Status of node rabbit@MYSERVER2 ... Error: unable to connect to node rabbit@MYSERVER2: nodedown DIAGNOSTICS =========== attempted to contact: [rabbit@MYSERVER2] rabbit@MYSERVER2: * connected to epmd (port 4369) on MYSERVER2 * epmd reports: node 'rabbit' not running at all no other nodes on MYSERVER2 * suggestion: start the node current node details: - node name: rabbitmqctl2199771@MYSERVER2 - home dir: C:\Users\RabbitMQ - cookie hash: mn6OaTX9mS4DnZaiOzg8pA==
在这一点上我重新启动RabbitMQ服务,然后再试一次
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status Status of node rabbit@MYSERVER2... [{pid,3784}, {running_applications, [{rabbitmq_management_agent,"RabbitMQ Management Agent","3.3.5"}, {rabbit,"RabbitMQ","3.3.5"}, {os_mon,"CPO CXC 138 46","2.2.15"}, {mnesia,"MNESIA CXC 138 12","4.12.1"}, {xmerl,"XML parser","1.3.7"}, {sasl,"SASL CXC 138 11","2.4"}, {stdlib,"ERTS CXC 138 10","2.1"}, {kernel,"ERTS CXC 138 10","3.0.1"}]}, {os,{win32,nt}}, {erlang_version, "Erlang/OTP 17 [erts-6.1] [64-bit] [smp:4:4] [async-threads:30]\n"}, {memory, [{total,35960208}, {connection_procs,2704}, {queue_procs,5408}, {plugins,111936}, {other_proc,13695792}, {mnesia,102296}, {mgmt_db,0}, {msg_index,21816}, {other_ets,884704}, {binary,25776}, {code,16672826}, {atom,602729}, {other_system,3834221}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{amqp,5672,"0.0.0.0"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,3435787059}, {disk_free_limit,50000000}, {disk_free,74911649792}, {file_descriptors, [{total_limit,8092}, {total_used,4}, {sockets_limit,7280}, {sockets_used,2}]}, {processes,[{limit,1048576},{used,139}]}, {run_queue,0}, {uptime,5}] ...done.
任何想法是什么导致这一点,以及如何自动检测的情况?
这是在Windows上运行RabbitMQ的具体问题吗?
当您尝试解析主机名时,主机名不区分大小写。 例如, LOCALHOST
和localhost
是相同的主机。
但是,当Erlang构造一个节点的名字时(例如RabbitMQ中的rabbit@<hostname>
),这个名字是区分大小写的。 所以rabbit@LOCALHOST
和rabbit@localhost
是两个不同的节点名称,即使它们在同一个主机上运行。
最近,我们(RabbitMQ团队)发现, 在Windows上,为RabbitMQ构造的节点名称是不一致的 。 因此,有时RabbitMQ作为一个Windows服务启动,可以命名为rabbit@MYHOST
但rabbitmqctl
会尝试到达rabbit@myhost
并失败。
由于RabbitMQ 3.6.0,节点名称应该是一致的。
对于任何人得到这个错误,这是我的修复。 我安装了Erlang,但忽略了设置环境变量的说明。
我正在阅读手动安装页面: https : //www.rabbitmq.com/install-windows-manual.html ,发现以下内容:
将ERLANG_HOME设置为实际安装Erlang的位置,例如C:\ Program Files \ erlx.xx(完整路径)。 RabbitMQ批处理文件希望执行%ERLANG_HOME%\ bin \ erl.exe。
转到开始>设置>控制面板>系统>高级>环境变量。 创建系统环境变量ERLANG_HOME并将其设置为包含bin \ erl.exe的目录的完整路径。
出于某种原因,自动安装将错误的路径名称分配给ERLANG_HOME变量 – 请参阅下面的图像。 我只是在最后加上\ bin。
我有一个类似的问题,在我的Linux机器,并张贴在这里的答案,因为在Windows上的rabbitmq可能类似的处理事情。
我的文章和解决方案: rabbtimqadmin – 无法连接:[Errno -2]姓名或服务未知
核心问题是在rabbitmq配置后更改服务器名称。 安装时,rabbitmq引用服务器名称,使其成为其配置的一部分。 我可以看到这是在Windows上类似的问题。
简而言之,您可以将服务器的名称更改为首次安装rabbitmq时的名称,或者您可以添加rabbitmq-env.conf
文件,但我不确定它将在Windows中的位置,但下面给出了有关Linux : https : //www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html
请注意,在Linux上,服务器的名称是CaSe SENiTivE! 所以你可能会或可能不会有类似的问题与Windows。
希望这有助于和祝你好运!
如果您使用的是linux,请尝试更改/ var / lib / rabbitmq / mnesia文件夹的权限。