rocketmq-5.4.0开发环境搭建

1. RocketMQ namesrv + broker + proxy + dashboard 整体架构

env

  • docker/docker-compose
  • rocketmq-5.4.0
  • rocketmq-dashboard

1.1 组件角色拆解

  • NameServer(控制面 · 轻量)
    负责:

    • Broker 注册与心跳
    • Topic → Broker 路由信息
      特点:
    • 无状态
    • 多实例互不通信(客户端轮询)
    • 故障影响有限(缓存兜底)
  • Broker(数据面 · 核心)
    负责:

    • 消息存储(CommitLog / ConsumeQueue / IndexFile)
    • Producer 写入、Consumer 拉取
    • 主从复制、刷盘策略是整个系统的“发动机 + 仓库”。
  • Proxy(接入面 · 抽象层)
    RocketMQ 5.x 的关键角色:

    • 统一客户端协议(Java / gRPC / HTTP)
    • 屏蔽 Broker 拓扑与变更
    • 天然适合做 公网 / 跨 VPC / 多语言 SDK 入口
    • 未来演进方向:多租户、鉴权、限流
  • Dashboard(运维面 · 观察者)
    负责:

    • Topic / Group / Broker 管理
    • 消息堆积、TPS、延迟可视化
    • 运维操作入口
      不参与消息链路,挂不挂不影响生产消费。

2.生产级逻辑拓扑

flowchart LR
    subgraph ClientSide["客户端侧"]
        P[Producer]
        C[Consumer]
    end

    subgraph AccessLayer["接入层"]
        Proxy1[Proxy-1]
        Proxy2[Proxy-2]
    end

    subgraph ControlPlane["控制面"]
        NS1[NameServer-1]
        NS2[NameServer-2]
    end

    subgraph DataPlane["数据面"]
        B1M[Broker-1 Master]
        B1S[Broker-1 Slave]
        B2M[Broker-2 Master]
        B2S[Broker-2 Slave]
    end

    subgraph Ops["运维面"]
        Dash[Dashboard]
    end

    P --> Proxy1
    P --> Proxy2
    C --> Proxy1
    C --> Proxy2

    Proxy1 --> NS1
    Proxy1 --> NS2
    Proxy2 --> NS1
    Proxy2 --> NS2

    Proxy1 --> B1M
    Proxy1 --> B2M
    Proxy2 --> B1M
    Proxy2 --> B2M

    B1M --> B1S
    B2M --> B2S

    Dash --> NS1
    Dash --> NS2
    Dash --> B1M
    Dash --> B2M

3. 消息流转路径(写 / 读)

3.1 Producer 写入路径

1
2
3
4
Producer
→ Proxy(鉴权 / 路由 / 负载)
→ NameServer(拉取路由缓存)
→ Broker Master(写 CommitLog)

3.2 Consumer 拉取路径

1
2
3
Consumer
→ Proxy
→ Broker Master / Slave(按配置)

4. 为什么 Proxy 是“必选项”(5.x 版本)

存算分离

  • 解耦客户端与 Broker

    • Broker IP 可内网化
    • 迁移、扩缩容对客户端无感
  • 网络与安全

    • 公网只暴露 Proxy
    • Broker 永不直连外部
  • SRE 视角的好处

    • Proxy 层做限流、熔断、灰度
    • 未来可接入 API Gateway / Service Mesh

一句话总结:

Proxy 把 RocketMQ 从“客户端直连中间件”升级为“标准消息服务”。


5.rocketmq-docker-compsoe.yml

5.1创建依赖目录及授权

mkdir -p data/{namesrv,broker,proxy}/logs
mkdir -p data/broker/store/  # 消息持久化
chown -R 3000:3000 data

5.2启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
services:
namesrv:
image: rocketmq:5.4.0
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- ./data/namesrv/logs:/home/rocketmq/logs/rocketmqlogs
networks:
- apps
command: sh mqnamesrv
broker:
image: rocketmq:5.4.0
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
- ./data/broker/logs:/home/rocketmq/logs/rocketmqlogs
- ./data/broker/store:/home/rocketmq/store
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
depends_on:
- namesrv
networks:
- apps
command: sh mqbroker
proxy:
image: rocketmq:5.4.0
container_name: rmqproxy
networks:
- apps
depends_on:
- broker
- namesrv
ports:
- 8080:8080
- 8081:8081
volumes:
- ./data/proxy/logs:/home/rocketmq/logs/rocketmqlogs
restart: on-failure
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
command: sh -c "sleep 20;sh mqproxy"

dashboard:
image: rocketmq-dashboard:latest
container_name: dashboard
ports:
- "8082:8082"
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv:9876
depends_on:
- namesrv
networks:
- apps
networks:
apps:
external: true # 使用已存在的network
docker network create -d bridge  --subnet 192.168.250.0/23 --gateway 192.168.250.1 apps

docker-compose pull && docker-compose up -d

5.3访问dashboard

70e696112af4e5267d22047295b73b1c.png