Docker for Windows安装RocketMQ 集群

共创建两个nameserver,两个master-broker,两个slave-broker

安装全在Docker for Windows上完成

master-a的broker.conf配置文件

brokerClusterName=rocketmq-cluster

# broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

# 0 表示Master,>0 表示Slave

brokerId=0

# 多网卡配置,不配置默认为内网,让mq只能内网访问

brokerIP1=x.x.x.x #这个IP设置为安装Docker for Windows机器的IP

# nameServer地址,分号分割

namesrvAddr=nameserver-a:9876;nameserver-b:9876

# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数

defaultTopicQueueNums=4

# 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭

autoCreateTopicEnable=true

# 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭

autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口

listenPort=10921 #改这个端口需要注意docker-compose配置文件中的映射端口

# 删除文件时间点,默认是凌晨4点

#deleteWhen=04

# 文件保留时间,默认是48小时

fileReservedTime=48

# commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

# ConsumeQueue每个文件默认存30w条, 根据业务情况调整

mapedFileSizeConsumeQueue=30000

# destroyMapedFileIntervalForcibly=12000

# redeleteHangedFileInterval=12000

# 检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

# 限制的消息大小

maxMessageSize=65536

# flushCommitLogLeastPages=4

# flushConsumeQueueLeastPages=2

# flushCommitLogThoroughInterval=10000

# flushConsumeQueueThoroughInterval=60000

# Broker的角色

# -ASYNC_MASTER 异步复制Master

# -SYNC_MASTER 同步双写Master

# -SLAVE

brokerRole=ASYNC_MASTER

# 刷盘方式

# - ASYNC_FLUSH 异步刷盘

# - SYNC_FLUSH 同步刷盘

flushDiskType=SYNC_FLUSH

# checkTransactionMessageEnable=false

# 发消息线程池数量

# sendMessageTreadPoolNums=128

# 拉消息线程池数量

# pullMessageTreadPoolNums=128

# lushDiskType=ASYNC_FLUSH

master-b的broker.conf配置文件

brokerClusterName=rocketmq-cluster

# broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

# 0 表示Master,>0 表示Slave

brokerId=0

# 多网卡配置,不配置默认为内网,让mq只能内网访问

brokerIP1=x.x.x.x

# nameServer地址,分号分割

namesrvAddr=nameserver-a:9876;nameserver-b:9876

# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数

defaultTopicQueueNums=4

# 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭

autoCreateTopicEnable=true

# 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭

autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口

listenPort=10931

# 删除文件时间点,默认是凌晨4点

#deleteWhen=04

# 文件保留时间,默认是48小时

fileReservedTime=48

# commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

# ConsumeQueue每个文件默认存30w条, 根据业务情况调整

mapedFileSizeConsumeQueue=30000

# destroyMapedFileIntervalForcibly=12000

# redeleteHangedFileInterval=12000

# 检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

# 限制的消息大小

maxMessageSize=65536

# flushCommitLogLeastPages=4

# flushConsumeQueueLeastPages=2

# flushCommitLogThoroughInterval=10000

# flushConsumeQueueThoroughInterval=60000

# Broker的角色

# -ASYNC_MASTER 异步复制Master

# -SYNC_MASTER 同步双写Master

# -SLAVE

brokerRole=ASYNC_MASTER

# 刷盘方式

# - ASYNC_FLUSH 异步刷盘

# - SYNC_FLUSH 同步刷盘

flushDiskType=SYNC_FLUSH

# checkTransactionMessageEnable=false

# 发消息线程池数量

# sendMessageTreadPoolNums=128

# 拉消息线程池数量

# pullMessageTreadPoolNums=128

# lushDiskType=ASYNC_FLUSH

slave-a的broker.conf配置文件

brokerClusterName=rocketmq-cluster

# broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

# 0 表示Master,>0 表示Slave

brokerId=1

# 多网卡配置,不配置默认为内网,让mq只能内网访问

brokerIP1=x.x.x.x

# nameServer地址,分号分割

namesrvAddr=nameserver-a:9876;nameserver-b:9876

# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数

defaultTopicQueueNums=4

# 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭

autoCreateTopicEnable=true

# 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭

autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口

listenPort=10941

# 删除文件时间点,默认是凌晨4点

#deleteWhen=04

# 文件保留时间,默认是48小时

fileReservedTime=48

# commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

# ConsumeQueue每个文件默认存30w条, 根据业务情况调整

mapedFileSizeConsumeQueue=30000

# destroyMapedFileIntervalForcibly=12000

# redeleteHangedFileInterval=12000

# 检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

# 限制的消息大小

maxMessageSize=65536

# flushCommitLogLeastPages=4

# flushConsumeQueueLeastPages=2

# flushCommitLogThoroughInterval=10000

# flushConsumeQueueThoroughInterval=60000

# Broker的角色

# -ASYNC_MASTER 异步复制Master

# -SYNC_MASTER 同步双写Master

# -SLAVE

brokerRole=SLAVE

# 刷盘方式

# - ASYNC_FLUSH 异步刷盘

# - SYNC_FLUSH 同步刷盘

flushDiskType=SYNC_FLUSH

# checkTransactionMessageEnable=false

# 发消息线程池数量

# sendMessageTreadPoolNums=128

# 拉消息线程池数量

# pullMessageTreadPoolNums=128

# lushDiskType=ASYNC_FLUSH

slave-b的broker.conf配置文件

brokerClusterName=rocketmq-cluster

# broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

# 0 表示Master,>0 表示Slave

brokerId=1

# 多网卡配置,不配置默认为内网,让mq只能内网访问

brokerIP1=x.x.x.x

# nameServer地址,分号分割

namesrvAddr=nameserver-a:9876;nameserver-b:9876

# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数

defaultTopicQueueNums=4

# 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭

autoCreateTopicEnable=true

# 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭

autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口

listenPort=10951

# 删除文件时间点,默认是凌晨4点

#deleteWhen=04

# 文件保留时间,默认是48小时

fileReservedTime=48

# commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

# ConsumeQueue每个文件默认存30w条, 根据业务情况调整

mapedFileSizeConsumeQueue=30000

# destroyMapedFileIntervalForcibly=12000

# redeleteHangedFileInterval=12000

# 检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

# 限制的消息大小

maxMessageSize=65536

# flushCommitLogLeastPages=4

# flushConsumeQueueLeastPages=2

# flushCommitLogThoroughInterval=10000

# flushConsumeQueueThoroughInterval=60000

# Broker的角色

# -ASYNC_MASTER 异步复制Master

# -SYNC_MASTER 同步双写Master

# -SLAVE

brokerRole=SLAVE

# 刷盘方式

# - ASYNC_FLUSH 异步刷盘

# - SYNC_FLUSH 同步刷盘

flushDiskType=SYNC_FLUSH

# checkTransactionMessageEnable=false

# 发消息线程池数量

# sendMessageTreadPoolNums=128

# 拉消息线程池数量

# pullMessageTreadPoolNums=128

# lushDiskType=ASYNC_FLUSH

上面四个配置文件中的brokerIP1都改为自己本地机器的IP

最后docker-compose配置文件docker-compose-rocketmq.yml

version: '3.7'
services:
  nameserver-a:
    image: apache/rocketmq:4.9.2
    container_name: nameserver-a
    ports:
      - 9877:9876
    volumes:
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\nameserver-a\logs:/home/rocketmq/logs
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\nameserver-a\store:/home/rocketmq/store
    command: sh mqnamesrv
  nameserver-b:
    image: apache/rocketmq:4.9.2
    container_name: nameserver-b
    ports:
      - 9878:9876
    volumes:
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\nameserver-b\logs:/home/rocketmq/logs
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\nameserver-b\store:/home/rocketmq/store
    command: sh mqnamesrv
  master-a:
    image: apache/rocketmq:4.9.2
    container_name: master-a
    ports:
      - 10919:10919
      - 10921:10921
      - 10922:10922
    volumes:
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\master-a\logs:/home/rocketmq/logs
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\master-a\store:/home/rocketmq/store
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\master-a\conf\broker.conf:/home/rocketmq/rocketmq-4.9.2/conf/broker.conf#这里映射的broker.conf文件就是上面四个文件中对应的其中一个
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  master-b:
    image: apache/rocketmq:4.9.2
    container_name: master-b
    ports:
      - 10931:10931
      - 10929:10929
      - 10932:10932
    volumes:
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\master-b\logs:/home/rocketmq/logs
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\master-b\store:/home/rocketmq/store
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\master-b\conf\broker.conf:/home/rocketmq/rocketmq-4.9.2/conf/broker.conf#这里映射的broker.conf文件就是上面四个文件中对应的其中一个
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  slave-a:
    image: apache/rocketmq:4.9.2
    container_name: slave-a
    ports:
      - 10941:10941
      - 10939:10939
      - 10942:10942
    volumes:
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\slave-a\logs:/home/rocketmq/logs
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\slave-a\store:/home/rocketmq/store
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\slave-a\conf\broker.conf:/home/rocketmq/rocketmq-4.9.2/conf/broker.conf#这里映射的broker.conf文件就是上面四个文件中对应的其中一个
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  slave-b:
    image: apache/rocketmq:4.9.2
    container_name: slave-b
    ports:
      - 10951:10951
      - 10949:10949
      - 10952:10952
    volumes:
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\slave-b\logs:/home/rocketmq/logs
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\slave-b\store:/home/rocketmq/store
      - F:\Docker\Env\RocketMQ\RocketMQ_Cluster\broker\slave-b\conf\broker.conf:/home/rocketmq/rocketmq-4.9.2/conf/broker.conf#这里映射的broker.conf文件就是上面四个文件中对应的其中一个
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  console:
    image: pangliang/rocketmq-console-ng:latest
    container_name: console-cluster
    ports:
      - 9090:8080
    environment:
#      - JAVA_OPTS= -Dlogging.level.root=info   -Drocketmq.namesrv.addr=nameserver-a:9877;nameserver-b:9878
#      - Dcom.rocketmq.sendMessageWithVIPChannel=false
        JAVA_OPTS: -Drocketmq.namesrv.addr=nameserver-a:9876;nameserver-b:9876
                   -Dcom.rocketmq.sendMessageWithVIPChannel=false
                   -Duser.timezone='Asia/Shanghai'
networks:
  default:
    external: true
    name: docker-network

 在运行前需要创建网络docker network create docker-network

最后将docker-compose-rocketmq.yml放在F:\Docker\Env\RocketMQ\RocketMQ_Cluster(根据自己的机器修改),docker-compose-rocketmq.yml映射的目录需要在本地机器提前建好

最后打开cmd对应路径,执行命令docker-compose -f docker-compose-rocketmq.yml up -d

出现绿色的文字表示已经启动成功

打开控制台查看 

集群搭建成功!

最后配置Springboot,引入依赖

<dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.4.0</version>
        </dependency>

 配置application.yaml中加入

rocketmq:
  consumer:
    group: aml_cust_consumer_group
    # 一次拉取消息最大值,注意是拉取消息的最大值而非消费最大值
    pull-batch-size: 10
  name-server: 127.0.0.1:9878;127.0.0.1:9877
  producer:
    # 发送同一类消息的设置为同一个group,保证唯一
    group: aml_cust_producer_group
    # 发送消息超时时间,默认3000
    sendMessageTimeout: 10000
    waitTimeMillsInSendQueue: 10000
    # 发送消息失败重试次数,默认2
    retryTimesWhenSendFailed: 2
    # 异步消息重试此处,默认2
    retryTimesWhenSendAsyncFailed: 2
    # 消息最大长度,默认1024 * 1024 * 4(默认4M)
    maxMessageSize: 4096
    # 压缩消息阈值,默认4k(1024 * 4)
    compressMessageBodyThreshold: 4096
    # 是否在内部发送失败时重试另一个broker,默认false
    retryNextServer: false

测试

        public static void main(String[] args) throws Exception {
            //创建一个生产者,指定生产者组为sanyouProducer
            DefaultMQProducer producer = new DefaultMQProducer("sanyouProducer");

            try {
                // 指定NameServer的地址
                producer.setNamesrvAddr("127.0.0.1:9877;127.0.0.1:9878");
                // 第一次发送可能会超时,我设置的比较大
                producer.setSendMsgTimeout(60000);

                // 启动生产者
                producer.start();
                org.apache.rocketmq.common.message.Message message = new org.apache.rocketmq.common.message.Message();
                message.setTopic("test-cluster");
                message.setBody("测试集群".getBytes());
                producer.send((org.apache.rocketmq.common.message.Message) message);

            } catch (MQClientException e) {
                e.printStackTrace();
            } catch (RemotingException e) {
                e.printStackTrace();
            } catch (MQBrokerException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                // 关闭生产者
                producer.shutdown();
            }
        }

在控制台中查看消息发送成功 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值