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。默认凭据是 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 认证码错误。
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
参见
- 维基百科: RabbitMQ
- erlang kernel parameters - 用于高级配置的 kernel 参数
- rabbitmq.config 示例 - rabbitmq.config 示例 (不包含在 rabbitmq 包中)