最近准备把rocketmq重新学下,先把环境搭建好
- Windows下安装docker
- 拉取最新的rocketmq
- 启动nameserver
- 启动broker
首先在Windows下安装docker,之前不知道为什么,docker desktop启动一直报错,今天把Windows更新了一下
,docker desktop正常打开了
docker拉取最新的rocketmq
docker pull apache/rocketmq:5.3.1
创建一个网络
以便nameserver和broker之间进行通信
docker network create rocketmq
启动nameserver
docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.3.1 sh mqnamesrv
查看namesrv启动状态
docker logs -f rmqnamesrv
启动broker
docker run -d --name rmqbroker --network rocketmq -p 10911:10911 -p 10909:10909 -e "NAMESRV_ADDR=rmqnamesrv:9876" -v /d/rocketmq/broker.conf:/home/rocketmq/rocketmq-5.3.1/conf/broker.conf apache/rocketmq:5.3.1 sh mqbroker
其中-v表示用于将宿主主机的文件或目录挂载容器内部,这样容器就能访问宿主主机上的文件系统
/d/rocketmq/broker.conf
是宿主机的路径,即Windows电脑里的路径
/home/rocketmq/rocketmq-5.3.1/conf/broker.conf
这是docker里的路径
启动成功
以下是报错信息
以及修改方式
报错提示容器已经被使用
The container name "/rmqnamesrv" is already in use by container "xxxx". You have to remove (or rename) that container to be able to reuse that name.
先查找正在运行的同名容器
docker ps -a
然后删除
docker rm 容器id或容器名称
报错
docker: Error response from daemon: invalid mode: \Users\xxxx\broker.conf.
docker挂在卷里需要使用Linux风格的路径样式
如果你的文件位于 C:\Users\xxx\broker.conf,则需要将路径写为 /c/Users/xxx/broker.conf
报错
org.apache.rocketmq.tools.command.SubCommandException: UpdateTopicSubCommand command failed
因为这个命令是在broker里使用的,首先要保证broker正常运行
执行docker ps -a
的时候,如果显示exited
则说明容器未运行
例如
先查看日志
docker logs rmqbroker
提示找不到该文件,首先需要将文件写成Linux下文件格式
这里是因为之前把宿主主机与docker文件位置写反了
正确方式是:-v <宿主机路径>:<容器路径>[:挂载选项]
正确的启动broker方式
docker run -d --name rmqbroker --network rocketmq -p 10911:10911 -p 10909:10909 -e "NAMESRV_ADDR=rmqnamesrv:9876" -v /d/rocketmq/broker.conf:/home/rocketmq/rocketmq-5.3.1/conf/broker.conf apache/rocketmq:5.3.1 sh mqbroker
报错
org.apache.rocketmq.client.exception.MQClientException: No route info of this topic: NORMAL_TOPIC
需要使用docker创建一个topic
先进入broker
容器里
docker exec -it rmqbroker bash
执行命令
mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t NORMAL_TOPIC
提示报错 mqadmin not found
需要先找到mqadmin的绝对位置
find -name mqadmin
然后在执行mqadmin命令
上述即安装完成