RabbitMQ启动失败,报错{'EXIT',nodistribution}问题求助
Windows 10 Pro下RabbitMQ 3.8.4启动失败(nodistribution错误)解决方案
问题描述
在Windows 10 Pro系统中启动RabbitMQ 3.8.4服务时失败,执行rabbitmq-server.bat后触发{'EXIT',nodistribution}错误,核心堆栈日志如下:
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.4\sbin>rabbitmq-server.bat 15:53:13.906 [error] 15:53:13.906 [error] Supervisor net_sup had child net_kernel started with net_kernel:start_link([rabbit_prelaunch_5364@localhost,shortnames], false, net_sup_dynamic) at undefined exit with reason {'EXIT',nodistribution} in context start_error BOOT FAILED =========== 15:53:13.906 [error] CRASH REPORT Process <0.200.0> with 0 neighbours exited with reason: {error,badarg} in gen_server:init_it/6 line 401 Exception during startup: 15:53:13.922 [error] BOOT FAILED 15:53:13.922 [error] =========== supervisor:children_map/4 line 1171 15:53:13.922 [error] Exception during startup: supervisor:'-start_children/2-fun-0-'/3 line 355 supervisor:do_start_child/2 line 371 15:53:13.922 [error] supervisor:do_start_child_i/3 line 385 15:53:13.922 [error] supervisor:children_map/4 line 1171 rabbit_prelaunch:run_prelaunch_first_phase/0 line 27 15:53:13.922 [error] supervisor:'-start_children/2-fun-0-'/3 line 355 rabbit_prelaunch:do_run/0 line 108 15:53:13.922 [error] supervisor:do_start_child/2 line 371 rabbit_prelaunch_dist:setup/1 line 15 15:53:13.922 [error] supervisor:do_start_child_i/3 line 385 rabbit_prelaunch_dist:duplicate_node_check/1 line 51 15:53:13.922 [error] rabbit_prelaunch:run_prelaunch_first_phase/0 line 27 error:{badmatch, 15:53:13.923 [error] rabbit_prelaunch:do_run/0 line 108 {error, 15:53:13.923 [error] rabbit_prelaunch_dist:setup/1 line 15 {{shutdown, 15:53:13.923 [error] rabbit_prelaunch_dist:duplicate_node_check/1 line 51 {failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}, 15:53:13.923 [error] error:{badmatch, {child,undefined,net_sup_dynamic, 15:53:13.923 [error] {error, {erl_distribution,start_link, 15:53:13.923 [error] {{shutdown, [[rabbit_prelaunch_5364@localhost,shortnames], 15:53:13.923 [error] {failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}, false,net_sup_dynamic]}, 15:53:13.923 [error] {child,undefined,net_sup_dynamic, permanent,1000,supervisor, 15:53:13.923 [error] {erl_distribution,start_link, [erl_distribution]}}}} 15:53:13.923 [error] [[rabbit_prelaunch_5364@localhost,shortnames], 15:53:13.923 [error] false,net_sup_dynamic]}, 15:53:13.924 [error] permanent,1000,supervisor, 15:53:13.924 [error] [erl_distribution]}}}} 15:53:13.924 [error] 15:53:14.924 [error] Supervisor rabbit_prelaunch_sup had child prelaunch started with rabbit_prelaunch:run_prelaunch_first_phase() at undefined exit with reason {badmatch,{error,{{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}},{child,undefined,net_sup_dynamic,{erl_distribution,start_link,[[rabbit_prelaunch_5364@localhost,shortnames],false,net_sup_dynamic]},permanent,1000,supervisor,[erl_distribution]}}}} in context start_error 15:53:14.924 [error] CRASH REPORT Process <0.152.0> with 0 neighbours exited with reason: {{shutdown,{failed_to_start_child,prelaunch,{badmatch,{error,{{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}},{child,undefined,net_sup_dynamic,{erl_distribution,start_link,[[rabbit_prelaunch_5364@localhost,shortnames],false,net_sup_dynamic]},permanent,1000,supervisor,[erl_distribution]}}}}}},{rabbit_prelaunch_app,start,[normal,[]]}} in application_master:init/4 line 138 {"Kernel pid terminated",application_controller,"{application_start_failure,rabbitmq_prelaunch,{{shutdown,{failed_to_start_child,prelaunch,{badmatch,{error,{{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}},{child,undefined,net_sup_dynamic,{erl_distribution,start_link,[[rabbit_prelaunch_5364@localhost,shortnames],false,net_sup_dynamic]},permanent,1000,supervisor,[erl_distribution]}}}}}},{rabbit_prelaunch_app,start,[normal,[]]}}}"} Kernel pid terminated (application_controller) ({application_start_failure,rabbitmq_prelaunch,{{shutdown,{failed_to_start_child,prelaunch,{badmatch,{error,{{shutdown,{failed_to_start_child,net_kernel, Crash dump is being written to: erl_crash.dump...done
已完成排查项:
- 端口未被占用
- epmd.exe进程正常运行
- Windows防火墙已放行erl.exe和epmd.exe
- 安装时曾出现
unexpected arguments neighbors string错误,但服务安装状态显示成功
解决方案
1. 修复Erlang节点名称环境变量
nodistribution错误多因Erlang节点名称解析异常导致:
- 打开系统环境变量设置,添加
ERLANG_NODE_NAME变量,值设为rabbit@localhost(短名称格式,无特殊字符) - 检查
HOSTNAME环境变量,确保值为localhost或有效本地主机名,避免含空格、特殊字符
2. 彻底重装RabbitMQ与Erlang
安装时的异常提示可能导致残留配置损坏:
- 执行
rabbitmq-service remove卸载RabbitMQ服务,停止所有相关进程 - 卸载Erlang(需确保版本兼容RabbitMQ 3.8.4,推荐Erlang 22.x系列)
- 删除残留文件:
- RabbitMQ安装目录(默认
C:\Program Files\RabbitMQ Server) - Erlang安装目录(默认
C:\Program Files\erlxx.x) - 用户目录下的
.erlang.cookie文件(路径:C:\Users\<你的用户名>)
- RabbitMQ安装目录(默认
- 以管理员身份重新安装Erlang,路径避免空格或特殊字符
- 同样以管理员身份安装RabbitMQ,完成后执行
rabbitmq-service install重新注册服务
3. 修改启动脚本指定节点参数
直接在启动脚本中强制指定节点配置:
- 进入RabbitMQ的sbin目录(默认
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.4\sbin) - 编辑
rabbitmq-server.bat,在启动Erlang的命令段添加-sname rabbit@localhost参数 - 保存后重新执行
rabbitmq-server.bat启动服务
4. 重置epmd与分布式端口
确保epmd服务状态正常,无冲突节点:
- 执行
netstat -ano | findstr :4369确认epmd默认端口(4369)未被占用,若被占用则结束对应进程 - 执行
epmd -kill终止epmd进程,再重新启动epmd - 执行
epmd -names查看注册节点,确认无重复的rabbit@localhost节点,再启动RabbitMQ
内容的提问来源于stack exchange,提问作者Nandkishor Chavan
相关产品推荐
相关产品推荐

