docker 部署rocketmq 5.1.1 集群

创建相关目录

mkdir -p /opt/rocketmq/conf/broker
mkdir -p /opt/rocketmq/conf/namesrv
mkdir -p /opt/rocketmq/data/broker

编写 nameservice 和broker 配置文件

nameservice.conf 如下:

listenPort: 9876
storePathRootDir: /opt/rocketmq-5.1.1/store

broker.conf 如下:

# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = rocketmq-broker
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0 
brokerId = 0
# Broker服务地址    String 内部使用填内网ip,如果是需要给外部使用填公网ip,自行更改
brokerIP1 = x.x.x.x
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable = true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup = true
#开启多队列分发特性
enableLmq = true
enableMultiDispatch = true

将nameservice 配置放在 /opt/rocketmq/conf/namesrv 目录
将broker 配置放在 /opt/rocketmq/data/broker 目录

注意:brokerIP1 需要修改成服务器公网ip,否则broker无法访问

编写docker-compose

version: '3'
services:
  # NameServer 服务
  rocketmq-namesrv:
    image: apache/rocketmq:5.1.1
    container_name: rocketmq-namesrv
    ports:
      - "9876:9876"  # 映射 NameServer 的端口
    volumes:
      - ./conf/namesrv:/opt/rocketmq-5.1.1/conf  # 映射配置文件目录
    command: sh mqnamesrv # 启动 NameServer

  # Broker 服务
  rocketmq-broker:
    image: apache/rocketmq:5.1.1
    container_name: rocketmq-broker
    depends_on:
      - rocketmq-namesrv  # 依赖于 NameServer 启动完毕
    ports:
      - "10911:10911"  # 映射 Broker 的端口
      - "10909:10909"  # 映射 Broker 的 HA 端口
    volumes:
      - ./conf/broker:/opt/rocketmq-5.1.1/conf
      # 映射配置文件目录
    command: sh mqbroker -c /opt/rocketmq-5.1.1/conf/broker.conf -n rocketmq-namesrv:9876  # 启动 Broker,连接到 NameServer  # 启动 Broker,连接到 NameServer

  # RocketMQ Console 服务
  rocketmq-console:
    image: styletang/rocketmq-console-ng
    container_name: rocketmq-console
    ports:
      - "8083:8080"  # 映射 RocketMQ Console 的端口
    environment:
      - rocketmq.config.namesrvAddr=rocketmq-namesrv:9876  # 配置 RocketMQ Console 连接的 NameServer 地址

将docker-compose 文件放在 /opt/rocketmq 目录下

启动 rocketmq 集群

在/opt/rocketmq目录下执行 docker-compose up -d 启动rocketmq 集群
在这里插入图片描述
浏览器输入 http://X.X.X.X:8083/ 查看控制台
在这里插入图片描述
创建topic
在这里插入图片描述
编写生产者消费者测试类

package com.example.demo;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.junit.Test;
public class RocketmqProducer {
    private static final Logger logger = LoggerFactory.getLogger(RocketmqProducer.class);
    // RocketMQ配置
    private static final String NAME_SERVER_ADDR = "host:9876";
    private static final String PRODUCER_GROUP = "your_producer_group";
    private static final String CONSUMER_GROUP = "your_consumer_group";
    private static final String TOPIC = "joy_topic";
    @Test
    public void rockMqPush() {
        try {
            DefaultMQProducer producer = new DefaultMQProducer(PRODUCER_GROUP);
            producer.setNamesrvAddr(NAME_SERVER_ADDR);
            producer.start();
            // 创建消息实例,参数分别是:主题,消息体
            Message message = new Message(TOPIC, "Hello, joy!".getBytes());
            // 发送消息并获取发送结果
            SendResult sendResult = producer.send(message);

            if (sendResult.getSendStatus() == SendStatus.SEND_OK) {
                logger.info("消息发送成功,消息ID:{}", sendResult.getMsgId());
            } else {
                logger.error("消息发送失败,错误信息:{}", sendResult.getSendStatus());
            }
        } catch (Exception e) {
            logger.error("消息发送异常", e);
        }
    }
    @Test
    public void rocketmqSub() {
        try {
            DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(CONSUMER_GROUP);
            consumer.setNamesrvAddr(NAME_SERVER_ADDR);
            consumer.subscribe(TOPIC, "*");
            // 注册消息监听器,处理消息的业务逻辑
            consumer.registerMessageListener(new MessageListenerConcurrently() {
                @Override
                public ConsumeConcurrentlyStatus consumeMessage(
                        java.util.List<MessageExt> msgs,
                        ConsumeConcurrentlyContext context) {
                    for (MessageExt msg : msgs) {
                        logger.info("收到消息:{}", new String(msg.getBody()));
                    }
                    // 消费成功
                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                }
            });
            // 启动消费者
            consumer.start();
            logger.info("消费者启动成功...");
            // 保持进程不退出,监听消息
            while (true) {
                Thread.sleep(1000);
            }
        } catch (Exception e) {
            logger.error("消费者异常", e);
        }
    }
}

控制台查看消息
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值