跳到主要内容
版本:4.1

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 工具之前,发出以下命令
    chcp 65001
    以强制控制台使用 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. 通过 Out-Host 管道传输 rabbitmqctl.bat 输出,对于每个命令,像这样: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
© . All rights reserved.