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。默认凭据为 用户名:guest 密码:guest

故障排除

服务停止时卡顿数分钟

Rabbitmq 软件包安装 epmd (Erlang 端口映射守护进程) 作为依赖项。如果您通过 systemd 运行 rabbitmq 服务器,它将启动分离的 epmd 进程,该进程不会随 systemctl stop 一起停止。如果您在 [Unit] 部分添加 After=epmd.service,则可以避免这种情况。不要忘记重新加载守护进程。

已更改主机名

如果您在安装 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 Cookie 错误

Erlang Cookie 错误

身份验证失败可能是由错误的 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 地址 (如果您配置 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

参见