docker-compose安装rocketmq

1. 创建RocketMq文件目录

sh 复制代码
mkdir rocketmq
mkdir -p rocketmq/brokerconf  rocketmq/logs rocketmq/store

2.创建broker.conf配置文件

sh 复制代码
vim  brokerconf/broker.conf
conf 复制代码
# 集群名称
brokerClusterName = DefaultCluster
# broker 名字
brokerName = broker-a
# 0表示master,>0 表示slave
brokerId = 0
# 删除文件的时间点
deleteWhen = 04
# 文件保留时间
fileReservedTime = 48
# Broker 的角色
# # - ASYNC_MASTER 异步复制Master
# # - SYNC_MASTER 同步双写Master
# # - SLAVE
brokerRole = ASYNC_MASTER
# 刷盘方式
# # - ASYNC_FLUSH 异步刷盘
# # - SYNC_FLUSH 同步刷盘
flushDiskType = ASYNC_FLUSH

# nameserver地址
namesrvAddr=60.204.149.224:9876
brokerIP1=60.204.149.224

3.创建docker-compose.yml文件

yml 复制代码
version: '3.8'
services:
  namesrv:
    image: apache/rocketmq:5.3.1
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - /root/docker/rocketmq/logs:/opt/logs
      - /root/docker/rocketmq//store:/opt/store
    networks:
      - rocketmq
    command: sh mqnamesrv
  broker:
    image: apache/rocketmq:5.3.1
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    volumes:
      - /root/docker/rocketmq/logs:/opt/logs
      - /root/docker/rocketmq/store:/opt/store
      - /root/docker/rocketmq/brokerconf/broker.conf:/etc/rocketmq/broker.conf
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
      - JAVA_OPTS=" -Duser.home=/opt"
    depends_on:
      - namesrv
    networks:
      - rocketmq
    command: sh mqbroker -c /etc/rocketmq/broker.conf
  proxy:
    image: apache/rocketmq:5.3.1
    container_name: rmqproxy
    networks:
      - rocketmq
    depends_on:
      - broker
      - namesrv
    ports:
      - 8080:8080
      - 8081:8081
    restart: on-failure
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    command: sh mqproxy
networks:
  rocketmq:
    driver: bridge

4.启动rocketmq

sh 复制代码
 docker-compose -f docker-compose.yml up -d

5.关闭rocketmq

sh 复制代码
docker-compose down

6.测试

6.1 消息生产者
java 复制代码
import static com.doudou.mq.MqConfig.NAME_SRV_ADDR;
import static com.doudou.mq.MqConfig.topic;

import java.nio.charset.StandardCharsets;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

public class Producer {

    public static void main(String[] args) throws MQClientException, InterruptedException {
        // 初始化消息生产者
        DefaultMQProducer producer = new DefaultMQProducer("DemoProducer");
        // 设置超时时间
        producer.setSendMsgTimeout(10000);
        // 指定nameserver地址
        producer.setNamesrvAddr(NAME_SRV_ADDR);
        // 启动消息生产者服务
        producer.start();

        for (int i = 0; i < 10; i++) {
            try {
                Message message = new Message(topic, ("Hello World" + i).getBytes(StandardCharsets.UTF_8));
                SendResult result = producer.send(message);
                System.out.printf("%s%n", result);
                Thread.sleep(1000);
            } catch (Exception e) {
                e.printStackTrace();
                Thread.sleep(1000);
            }
        }
        producer.shutdown();
    }
}
6.2 消息消费者
java 复制代码
import static com.doudou.mq.MqConfig.NAME_SRV_ADDR;
import static com.doudou.mq.MqConfig.topic;

import java.nio.charset.StandardCharsets;
import java.util.List;
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.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;

public class Consumer {

    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("DemoConsumer");
        consumer.setNamesrvAddr(NAME_SRV_ADDR);
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        consumer.subscribe(topic, "*");
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list,
                    ConsumeConcurrentlyContext consumeConcurrentlyContext) {
                for (MessageExt messageExt : list) {
                    System.out.println(new String(messageExt.getBody(), StandardCharsets.UTF_8));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
        System.out.println("Consumer Started");
    }

}
6.3 依赖
xml 复制代码
<dependency>
    <groupId>org.apache.rocketmq</groupId>
     <artifactId>rocketmq-client</artifactId>
     <version>5.3.0</version>
 </dependency>
相关推荐
Andy杨1 小时前
20250718-5-Kubernetes 调度-Pod对象:重启策略+健康检查_笔记
笔记·容器·kubernetes
Andy杨2 小时前
20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
linux·docker·容器
别致的影分身8 小时前
Docker 镜像原理
运维·docker·容器
阿葱(聪)8 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
指月小筑8 小时前
K8s 自定义调度器 Part1:通过 Scheduler Extender 实现自定义调度逻辑
云原生·容器·kubernetes·go
?ccc?9 小时前
Kubernetes 架构原理与集群环境部署
容器·架构·kubernetes
Elastic 中国社区官方博客10 小时前
在 Windows 上使用 Docker 运行 Elastic Open Crawler
大数据·windows·爬虫·elasticsearch·搜索引擎·docker·容器
玄辰星君10 小时前
【MAC】nacos 2.5.1容器docker安装
macos·docker·nacos
土小帽软件测试11 小时前
docker安装、启动jenkins服务,创建接口自动化定时任务(mac系统)
docker·容器·jenkins
世纪摆渡人11 小时前
部署-k8s和docker、jenkins的区别和联系
docker·kubernetes·jenkins