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 命令提示符 (sbin 目录)”开始菜单项,并运行以下命令以重新安装 Windows 服务
.\rabbitmq-service.bat remove
.\rabbitmq-service.bat install
.\rabbitmq-service.bat start
如果在此期间有任何环境变量发生更改,则还需要重新安装 Windows 服务。
无法安装到包含非 ASCII 字符的路径
如果安装到包含非 ASCII 字符的路径,RabbitMQ 将无法启动,并显示以下错误消息
RabbitMQ: Erlang machine stopped instantly (distribution name conflict?)
这是因为我们需要将编译后的 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 1
b. 打开一个新的控制台窗口以使更改生效
有关更多信息(包括注意事项),请参阅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 命令提示符 (sbin 目录)”开始菜单项,并运行以下命令
.\rabbitmq-service.bat stop
.\rabbitmq-service.bat remove
.\rabbitmq-service.bat install
.\rabbitmq-service.bat start