简介:


使用docker-compose部署rocketmq5.0。文中会介绍docker-compose版本以及需要注意的项
第一步:进入hub.docker.com搜索rocketmq

我们选择第一个,因为第一个是7个月前更新的,(我看有很多博客使用的依旧是最下面的那种版本,但是现在的一些配置已经都不一样了,导致很多东西不能用)

第二步:下载docker-compose并赋予权限
https://get.daocloud.io/#install-compose
# get.daocloud.io是国内链接,因此可以高速安装

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
提示:v2.12.2是版本号,可以自己更换

chmod +x /usr/local/bin/docker-compose #授权,如果没有赋予权限,下一步是查不到的

docker-compose version # docker-compose -v 都可以查看版本

执行刚刚复制的命令下载rocketmq最新版


docker pull apache/rocketmq:latest

第三步:进入服务器建立需要映射的文件夹和文件
提示:推荐在/usr/local中建立,因为linux中每个文件夹都有其用意,我们应该遵守规则。

1、建立文件夹


mkdir rocketmq
mkdir rocketmq/logs
mkdir rocketmq/data
mkdir rocketmq/conf

不小心建错使用下面命令删除


rm -rf 文件夹名称 

2、在conf文件夹下建立broker.conf文件


vim broker.conf

broker.conf的内容可以从这里复制:

https://github.com/apache/rocketmq/blob/master/distribution/conf/broker.conf

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 服务器ip地址

说明:我们之所以要建立broker.conf文件,是因为我们需要通过这个文件把RocketMQ管理起来,尽管我们可以暂时什么都不做

3、在rocketmq文件夹中建立docker-compose.yml文件


vim docker-compose.yml

#version: '3.8'
services:
  nameserver:
    image: apache/rocketmq:5.1.0
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    restart: always
    volumes:
      - /usr/local/docker/rocketmq/logs:/home/rocketmq/logs
    environment:
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms256M -Xmx256M -Xmn128m"
    command: ["sh","mqnamesrv"]

  broker:
    image: apache/rocketmq:5.1.0
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
    restart: always
    volumes:
      - /usr/local/docker/rocketmq/logs:/root/logs
      - /usr/local/docker/rocketmq/store:/root/store
      - /usr/local/docker/rocketmq/conf/broker.conf:/home/rocketmq/broker.conf
    links:
     - nameserver:namesrv
    depends_on:
      - 'nameserver'
    environment:
      NAMESRV_ADDR: nameserver:9876
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms256M -Xmx256M -Xmn128m"
    command: ["sh","mqbroker","-c","/home/rocketmq/broker.conf","autoCreateTopicEnable=true"]
 
  rmqdashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: rocketmq-dashboard
    ports:
      - 8082:8080
    restart: always
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=nameserver:9876"
注意:volumes参数的映射规则是," : "冒号前面是宿主机的文件夹和文件路径,冒号后面是容器内的路径。在配置broker的volumes时,容器内的路径一定要用root开头,否则会导致broker启动的时候一直退出,查看日志也没有任何信息,只能在docker-compose up的时候看见:rmqbroker exited with code 253
说明:
apacherocketmq/rocketmq-dashboard:latest

这个镜像是控制台的镜像,在docker-compose中配置好之后,启动时会自动下载(其实所有镜像配置完成后在启动时都会校验,没有则自动下载)

启动

docker-compose up -d # “ -d ” 指后台运行,想看启动时的日志可以不用加

成功

结尾

附加几个docker-compose常用的命令,如果配置有问题,方便删除重新构建
验证编写的docker-compose.yml 是否正确

    docker-compose build
    或者
    docker-compose config -g
停止docker-compose运行的镜像

docker-compose stop
停止并删除docker-compose运行的镜像

docker-compose down
删除docker-compose发布的容器

docker-compose rm

在代码中发送消息时遇到的问题:

一、org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout

该问题的解决方式是在broker.conf文件中添加一行参数:


brokerIP1 = 服务器IP

完事重新启动broker即可。

  1. 发送成功

  1. 控制台显示

  1. 消费成功

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐