Windows 配置
本指南是主 Windows 安装指南 的补充。
它记录了可能导致 RabbitMQ Windows 服务或 CLI 工具出现故障的已知条件和场景。
防病毒软件
防病毒软件和相关的安全软件可能会阻止节点接受或打开网络连接、访问磁盘文件等。这会导致偶发的、极难排查的故障。
强烈建议将 RabbitMQ 进程、端口、Windows 服务和节点数据目录都排除在这些工具的扫描范围之外。
更好的选择是在配置了防火墙但没有安装任何防病毒软件的专用主机上运行 RabbitMQ 节点。
Erlang 分布端口
要为 Erlang 分布指定非标准端口,请执行以下操作:
- 确保使用安装 RabbitMQ 所使用的同一管理员用户。
- 使用
.\rabbitmq-service.bat stop停止 RabbitMQ Windows 服务。 - 使用
.\rabbitmq-service.bat remove移除 RabbitMQ Windows 服务。 - 创建
%AppData%\RabbitMQ\rabbitmq-env-conf.bat文件,内容如下(请使用您自己的端口号):
set DIST_PORT=44556
- 使用
.\rabbitmq-service.bat install安装 RabbitMQ Windows 服务。 - 使用
.\rabbitmq-service.bat start启动 RabbitMQ Windows 服务。 - 验证用于节点间通信和 CLI 工具通信的端口。
epmd -names
多个 Erlang 版本可能导致安装问题
由于 Windows .exe 安装程序检测已安装 Erlang 版本的方式,RabbitMQ 可能最终未使用已安装的最新 Erlang 版本。请确保只安装一个 Erlang 版本——您希望 RabbitMQ 使用的版本。如果您必须升级 Erlang,请使用以下步骤:
- 确保使用安装 RabbitMQ 所使用的同一管理员用户。
- 使用
.\rabbitmq-service.bat stop停止 RabbitMQ Windows 服务。 - 卸载 Erlang
- 安装新版本的 Erlang
- 打开“RabbitMQ Command Prompt (sbin dir)”开始菜单项,然后运行以下命令重新安装 Windows 服务:
.\rabbitmq-service.bat remove
.\rabbitmq-service.bat install
.\rabbitmq-service.bat start
如果此期间任何环境变量发生更改,则 重新安装 Windows 服务 也是必要的。
无法安装到包含非 ASCII 字符的路径
RabbitMQ 将无法启动,并出现以下错误:
RabbitMQ: Erlang machine stopped instantly (distribution name conflict?)
当安装到包含非 ASCII 字符的路径时。这是因为我们需要将已编译的 Erlang 文件的位置传递给 Erlang VM。它期望输入为 UTF-8,但控制台通常使用其他编码。
缓解措施
可以使用以下任一选项来缓解此问题:
- 将
RABBITMQ_BASE覆盖,指向一个只包含 ASCII 字符的目录,并 重新安装 Windows 服务。 - 编辑文件
rabbitmq-server.bat,将行set TDP0=%~dp0更改为set TDP0=%~dps0。这将到处使用短路径(臭名昭著的C:\PROGRA~1)。
CLI 工具显示或解析非 ASCII 字符不正确
类似地,RabbitMQ CLI 工具将期望命令行参数以 UTF-8 编码,并以 UTF-8 显示字符串。控制台将提供并期望某种特定国家的编码。
缓解措施
可以使用以下任一选项来缓解此问题:
- 避免在 RabbitMQ 安装和 节点目录 路径中使用非 ASCII 字符。
- 在较新版本的 Windows 上,请运行命令:
在使用 CLI 工具之前,强制控制台使用 UTF-8。
chcp 65001 - 如果可能,请使用 管理插件而不是 CLI 工具。
CLI 工具显示 ANSI 字符序列
如果 rabbitmqctl 和其他 CLI 工具的输出如下所示:
←[1mUsage←[0m
rabbitmqctl [--node <node>] [--timeout <timeout>] [--longnames] [--quiet] <command> [<command options>]
Available commands:
←[1mHelp←[0m:
autocomplete Provides command name autocomplete variants
help Displays usage information for a command
version Displays CLI tools version
缓解措施
有两种可能的缓解措施:
- 将
rabbitmqctl.bat的输出通过Out-Host管道传输,对每个命令执行此操作,例如:rabbitmqctl.bat | Out-Host - 全局启用命令和 PowerShell 窗口中的 VT/ANSI 转义序列:a. 在 PowerShell 中:
Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1b. 打开一个新的控制台窗口,更改才能生效。
有关更多信息,包括注意事项,请参阅 PowerShell 控制台中使用 ANSI / VT100 代码彩色文本输出。
以非管理员用户身份安装会将 .erlang.cookie 放在错误的位置
如果使用非管理员帐户安装 RabbitMQ,节点和 CLI 工具使用的 共享密钥文件将不会放置在正确的位置,这会导致使用 rabbitmqctl.bat 和其他 CLI 工具时出现 身份验证失败。
缓解措施
可以使用以下任一选项来缓解此问题:
- 使用管理员用户重新安装 RabbitMQ。
- 手动将文件
.erlang.cookie从%SystemRoot%或%SystemRoot%\system32\config\systemprofile复制到%HOMEDRIVE%%HOMEPATH%。
请参阅 CLI 指南中的 CLI 工具如何进行节点身份验证(以及节点之间如何进行身份验证)。
设置 net_ticktime
由于 RabbitMQ 作为 Windows 服务启动的方式,您无法使用配置文件设置 net_ticktime,而是必须使用环境变量。
缓解措施
首先,使用您安装 RabbitMQ 所使用的(或将要使用的)管理员帐户登录,并创建 %AppData%\RabbitMQ\rabbitmq-env-conf.bat 文件,内容如下:
@echo off
set SERVER_ADDITIONAL_ERL_ARGS=-kernel net_ticktime 120
上述设置将 net_ticktime 设置为 120 秒。
如果您尚未安装 RabbitMQ,该设置将在安装过程中生效。
如果您已安装 RabbitMQ,请打开“RabbitMQ Command Prompt (sbin dir)”开始菜单项并运行以下命令:
.\rabbitmq-service.bat stop
.\rabbitmq-service.bat remove
.\rabbitmq-service.bat install
.\rabbitmq-service.bat start