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 字符的路径
当安装到路径中包含非 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
缓解措施
有两种可能的缓解措施
- 通过
Out-Host
管道传输rabbitmqctl.bat
输出,对于每个命令,像这样: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 Command Prompt (sbin dir)”开始菜单项并运行这些命令
.\rabbitmq-service.bat stop
.\rabbitmq-service.bat remove
.\rabbitmq-service.bat install
.\rabbitmq-service.bat start