跳至主内容
版本:4.2

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 上,请运行命令:
    chcp 65001
    在使用 CLI 工具之前,强制控制台使用 UTF-8。
  • 如果可能,请使用 管理插件而不是 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

缓解措施

有两种可能的缓解措施:

  1. rabbitmqctl.bat 的输出通过 Out-Host 管道传输,对每个命令执行此操作,例如:rabbitmqctl.bat | Out-Host
  2. 全局启用命令和 PowerShell 窗口中的 VT/ANSI 转义序列:a. 在 PowerShell 中:Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1 b. 打开一个新的控制台窗口,更改才能生效。

有关更多信息,包括注意事项,请参阅 PowerShell 控制台中使用 ANSI / VT100 代码彩色文本输出

如果使用非管理员帐户安装 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
© . This site is unofficial and not affiliated with VMware.