跳转至内容

RabbitMQ

来自 ArchWiki

RabbitMQ 是一个消息代理,一个消息传递的中间件。它为您的应用程序提供了一个通用的平台来发送和接收消息,并为您的消息提供了一个安全的存储地点,直到被接收。

安装

安装 rabbitmq 包。

配置

不需要进行任何配置。只需 启动 和/或 启用 rabbitmq.service

默认配置文件位置:/etc/rabbitmq/rabbitmq-env.conf。有关配置的更多信息,请参阅 官方文档

本文或本章节已过时。

原因: 插件路径在 4.0.5 版本后更改 (讨论请参见 Talk:RabbitMQ#Plugins Directory Missing)

启用 MQTT

RabbitMQ 可以作为 MQTT 服务器。要启用此功能,需要启用以下插件:

# rabbitmq-plugins enable rabbitmq_mqtt

需要重启 RabbitMQ 服务才能使此更改生效。

客户端需要在发布到主题之前进行身份验证。RabbitMQ 通过虚拟主机隔离流量,您需要将 `configured_vhost_name:your_user_name` 作为用户名来验证身份。

启用 HTTP 管理界面

要启用 HTTP 管理页面,请执行以下操作:

# rabbitmq-plugins enable rabbitmq_management

然后导航到 <主机的 IP 地址>:15672。默认凭据是 username:guest password:guest

故障排除

服务停止卡顿几分钟

Rabbitmq 包安装时会作为依赖项安装 epmd (Erlang Port Mapping Daemons)。如果您通过 systemd 运行 rabbitmq 服务器,它将启动一个分离的 epmd 进程,该进程不会随着 systemctl stop 命令停止。您可以通过在 [Unit] 部分添加 After=epmd.service 来避免这种情况。不要忘记重新加载 daemons。

更改了主机名

如果您在安装 rabbitmq 后更改了主机名,它将无法再启动。这是由于 /etc/rabbitmq/rabbitmq-env.conf 中指定的 NODENAME。将其更新为反映您的新主机名,例如:

/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@my-new-hostname
...

已将 RabbitMQ 升级到最新版本但无法启动

这可能会导致您的 /etc/rabbitmq/rabbitmq-env.conf 中的 NODENAME 不正确。例如,它可能会导致添加另一个 @hostname 部分。无论哪种情况,都可以通过 #更改了主机名 来修复。

如果服务启动时出现错误:

BOOT FAILED
[error] <0.218.0> ===========
[error] <0.218.0> Error during startup:  {error,failed_to_initialize_feature_flags_registry}


看起来这个错误与升级后插件文件夹的不兼容有关。一种解决方案是完全删除 rabbitmq 的所有痕迹并重新安装。

# pacman -Rn rabbitmq
# rm -r /etc/rabbitmq
# rm -r /var/lib/rabbitmq [May be unnecessary]
# pacman -S rabbitmq
# systemctl start rabbitmq.service


升级到最新版本 (4.0.5-3) 后重新启动,仍然可能因为缺少变量而出现问题。在这种情况下,请添加:

/etc/rabbitmq/rabbitmq-env.conf
PLUGINS_DIR="/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-4.0.5/plugins"
...

rabbitmqctl 和其他命令行工具出现问题

使用最新版本 (4.0.5-3),看起来 /usr/lib/rabbitmq/bin/ 不在 $PATH 中,另请参阅 #Erlang 认证码错误

身份验证失败可能是由于 rabbitmq HOME 设置不正确。

Authentication failed (rejected by the remote node), please check the Erlang cookie
...
home dir: /root

HOME 可以在配置文件中设置:

/etc/rabbitmq/rabbitmq-env.conf
...
HOME=/var/lib/rabbitmq
...

无法建立 TCP 连接

如果看到此错误,请确保 /etc/hosts 中与您的主机名对应的第一个条目包含与 /etc/rabbitmq/rabbitmq-env.conf 中指定的 IP 地址相同的 IP 地址(如果您将 rabbitmq 配置为绑定到特定接口,则此错误很常见)。

无法通过 localhost 连接 Pika Python 客户端

尝试通过 localhost 连接 Pika Python 客户端会引发异常:

...
pika.exceptions.ProbableAccessDeniedError: (541, "INTERNAL_ERROR - access to vhost '/' refused for user 'guest': vhost '/' is down")

软件包的默认配置文件 /etc/rabbitmq/rabbitmq-env.conf 是:

/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@localhost
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672

删除 NODENAME 中的用户名部分,只保留机器的主机名(应与 /etc/hosts 中显示的主机名匹配),可以解决此问题。

/etc/rabbitmq/rabbitmq-env.conf
NODENAME=localhost
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672

参见