RabbitMQ
RabbitMQ 是一个消息代理,是消息传递的中介。它为您的应用程序提供了一个通用的平台来发送和接收消息,并为您的消息提供了一个安全的地方,直到被接收。
安装
配置
应该不需要配置。只需 启动 和/或 启用 rabbitmq.service
即可。
默认配置文件位置 /etc/rabbitmq/rabbitmq-env.conf
。请参阅官方文档以了解更多关于配置的信息
启用 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
参见
- Wikipedia:RabbitMQ
- erlang 内核参数 - 用于高级配置的内核参数
- rabbitmq.config 示例 - rabbitmq.config 示例 (rabbitmq 软件包中未包含)