因为是 windows 开发环境,安装了 Docker Desktop 来管理镜像和容器。但有些服务是不能简单安装启动的,需要增加配置参数和映射端口。此时反倒是使用命令行安装更加简单。

docker pull rabbitmq 默认安装最新版本,一开始通过 Docker Desktop 去运行,也没有找相关的参数设置文档,导致只增加了 5672 端口映射,然后怎么都连接不上。

一开始使用的是 MQTTBox,之后又下载安装了 MQTTX 工具,但都无法连接,后面考虑到 RabbitMQ 与 MQTT 协议可能并不等同,所以又下载了一个 RabbitMQ Assistant。这个明确是 RabbitMQ 的连接助手,但还是连接不上。

项目代码里有账号密码,都是 guest,之前听别人说是默认密码,所以也怎么关注,后面找到了一个博客,在运行 rabbitmq 容器前,需要明确账号密码。所以干脆根据指令重新创建容器:

docker run -d --hostname localhost --name rabbitmq-iot -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest -p 15672:15672 -p 5672:5672 rabbitmq:latest

添加的 hostname 不能是 127.0.0.1 地址,需要是一个可以解析的域名。后面 RABBITMQ_DEFAULT_USER 参数携带管理员账号名,RABBITMQ_DEFAULT_PASS 参数携带管理员密码,显然不加这两个参数默认是没有的。5672 端口对应这服务端口。

以下是安装管理插件,提供对 web 页面访问 http://localhost:15672/(插件似乎是默认绑定到 15672,所以需要前面添加这个端口的映射):

docker exec -it rabbitmq-iot rabbitmq-plugins enable rabbitmq_management

运行 RabbitMQ 并安装插件

再次通过 RabbitMQ Assistant 填写域名、端口、账号、密码后,终于连接成功了。这个 RabbitMQ Assistant 其实跟 rabbitmq_management 插件提供的内容差不多,关系类似于 Navicat 之于 phpAdmin。

RabbitMQ Assistant 连接页面

但其他两个 MQTT 的连接工具仍然不行,可能是 RabbitMQ 默认不支持 MQTT 协议吧