Bootstrap

Docker compose部署RocketMQ(单机版)

 整个工具的代码都在Gitee或者Github地址内

gitee:solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb

github:GitHub - ZeroNing/solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb

1.新增data文件夹

2.新增logs文件夹

然后在里面新建两个文件夹broker跟nameserver

3.新增conf文件夹

4.在conf文件夹新增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.

#用于集群中的 Broker 识别和管理,多个 Broker 可以属于同一个集群。
brokerClusterName = DefaultCluster
#在一个集群中标识 Broker,不同的 Broker 必须有不同的 brokerName。
brokerName = broker-a
#用于标识 Broker 的角色,0 通常表示主节点(Master),大于 0 的值用于备用节点(Slave)。
brokerId = 0
#设定在每天的凌晨 4 点(04 表示 4 AM)执行过期文件删除操作。
deleteWhen = 04
#指定消息存储文件的保留时间,超过这个时间的文件将被删除以释放存储空间。
fileReservedTime = 48
#ASYNC_MASTER 表示这个 Broker 是异步主节点,在异步复制模式下工作;它会在不等待从节点(Slave)确认的情况下继续处理新消息。
brokerRole = ASYNC_MASTER
#ASYNC_FLUSH 表示异步刷盘,即消息被写入内存后返回 ack,稍后再写入磁盘。这种方式提升性能,但可能在机器故障时丢失数据。
flushDiskType = ASYNC_FLUSH

5.新增docker compose文件

version: '3'  # Docker Compose 文件格式版本

services:
  rmqnamesrv:
    image: apache/rocketmq:latest  # 使用 RocketMQ 最新版本的镜像
    container_name: rmqnamesrv     # 指定容器的名称为 rmqnamesrv
    ports:
      - 9876:9876  # 将主机的 9876 端口映射到容器内的 9876 端口,供外部访问 NameServer
    restart: always  # 如果容器崩溃或重新启动 Docker 服务,则自动重启容器
    privileged: true  # 以特权模式运行容器,通常用于需要访问宿主机设备的场景
    volumes:
      - ./logs/nameserver:/home/rocketmq/logs  # 将主机上的日志目录挂载到容器内
      - /etc/localtime:/etc/localtime  # 将宿主机的时间设置挂载到容器,以同步时间
    environment:
      - MAX_HEAP_SIZE=256M  # 设置 Java 虚拟机最大堆内存为 256MB
      - HEAP_NEWSIZE=128M   # 设置 Java 的新生代内存大小为 128MB
    command: ["sh","mqnamesrv"]  # 启动容器时执行的命令,用于启动 NameServer

  broker:
    image: apache/rocketmq:latest  # 使用 RocketMQ 最新版本的镜像
    container_name: rmqbroker      # 指定容器的名称为 rmqbroker
    ports:
      - 10909:10909  # 将主机的 10909 端口映射到容器内的 10909 端口,供外部访问
      - 10911:10911  # 将主机的 10911 端口映射到容器内的 10911 端口,供外部访问
    restart: always  # 如果容器崩溃或重新启动 Docker 服务,则自动重启容器
    privileged: true  # 以特权模式运行容器
    volumes:
      - ./logs/broker:/root/logs  # 将主机上的日志目录挂载到容器内
      - ./data:/root/store  # 将主机上的数据目录挂载到容器内
      - ./conf/broker.conf:/home/rocketmq/broker.conf  # 挂载自定义的 Broker 配置文件
      - /etc/localtime:/etc/localtime  # 将宿主机的时间设置挂载到容器,以同步时间
    depends_on:
      - 'rmqnamesrv'  # 确保在启动 broker 之前,NameServer 已经启动
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876  # 设置 NameServer 的地址,以便 Broker 能够连接到 NameServer
      - MAX_HEAP_SIZE=512M  # 设置 Java 虚拟机最大堆内存为 512MB
      - HEAP_NEWSIZE=256M   # 设置 Java 的新生代内存大小为 256MB
    command: ["sh","mqbroker","-c","/home/rocketmq/broker.conf"]  # 启动 Broker 时使用自定义配置文件

  rmqdashboard:
    image: apacherocketmq/rocketmq-dashboard:latest  # 使用 RocketMQ Dashboard 最新版本的镜像
    container_name: rocketmq-dashboard  # 指定容器的名称为 rocketmq-dashboard
    ports:
      - 8080:8080  # 将主机的 8080 端口映射到容器内的 8080 端口,供外部访问 Dashboard
    restart: always  # 如果容器崩溃或重新启动 Docker 服务,则自动重启容器
    privileged: true  # 以特权模式运行容器
    depends_on:
      - 'rmqnamesrv'  # 确保在启动 Dashboard 之前,NameServer 已经启动
    environment:
      - JAVA_OPTS= -Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
      # 设置 Java 虚拟机参数,指定 NameServer 地址,并禁用 VIP 通道

;