-
Notifications
You must be signed in to change notification settings - Fork 289
Expand file tree
/
Copy pathdocker-compose-rocketmq.yaml
More file actions
112 lines (106 loc) · 5.49 KB
/
docker-compose-rocketmq.yaml
File metadata and controls
112 lines (106 loc) · 5.49 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
version: '3.8'
services:
# RocketMQ Nameserver (Service Discovery)
nameserver:
image: apache/rocketmq
platform: linux/amd64
container_name: rocketmq-nameserver
ports:
- "9876:9876" # Nameserver port
command: sh mqnamesrv
healthcheck: # Health check to ensure Nameserver is ready
test: [ "CMD", "sh", "-c", "netstat -an | grep 9876" ]
interval: 5s
timeout: 10s
retries: 10
environment:
- JAVA_OPT_EXT=-Xms64m -Xmx64m -Xmn32m -XX:MaxDirectMemorySize=64m -XX:MaxMetaspaceSize=96m
# RocketMQ Broker (Message Storage)
broker:
image: apache/rocketmq
platform: linux/amd64
container_name: rocketmq-broker
ports:
- "10909:10909" # Broker HA port
- "10911:10911" # Broker port
- "10912:10912" # Broker TLS port (optional)
environment:
- NAMESRV_ADDR=nameserver:9876 # Connect to nameserver
- BROKER_CLUSTER_NAME=DefaultCluster
- BROKER_NAME=broker-a
- BROKER_ID=0
- AUTO_CREATE_TOPIC_ENABLE=true # Auto-create topics
- JAVA_OPT_EXT=-Xms128m -Xmx128m -Xmn64m -XX:MaxDirectMemorySize=128m -XX:MaxMetaspaceSize=128m
command: sh mqbroker
depends_on:
- nameserver
healthcheck:
test: [ "CMD", "sh", "-c", "netstat -an | grep 10911" ]
interval: 5s
timeout: 10s
retries: 10
proxy:
image: apache/rocketmq
platform: linux/amd64
container_name: rmqproxy
depends_on:
- broker
- nameserver
ports:
- "8081:8081" # HTTP endpoint (for REST API)
- "9877:9877" # gRPC endpoint (for clients)
environment:
- NAMESRV_ADDR=nameserver:9876
- JAVA_OPT_EXT=-Xms64m -Xmx64m -Xmn32m -XX:MaxDirectMemorySize=64m -XX:MaxMetaspaceSize=96m
command: sh mqproxy
healthcheck:
test: [ "CMD", "sh", "-c", "netstat -an | grep 8081" ]
interval: 5s
timeout: 10s
retries: 10
# Service to create the RocketMQ topic
create-topic:
image: apache/rocketmq # Use the same RocketMQ image to get mqadmin tool
platform: linux/amd64
command: > # Multi-line command to create the topic
sh -c "
echo 'Waiting for broker to be healthy...' &&
until curl -s http://broker:10911/ &>/dev/null; do
echo 'Broker not fully ready yet, retrying in 60 seconds...'
sleep 60
done;
echo 'Broker is up. Creating multiple topics...' &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_building_dispatch -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_building_dispatch_async -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_named_gateway_dispatch -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_mc_cloudevents -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_mc_cloudevents_async -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_mc_rmm -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t bt_mc_rmm_async -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_post_via_gateway -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_post_via_gateway_async -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_requeueing -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_requeueing_async -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_dead_letter -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_dead_letter_async -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_dlq_source -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_dlq_target -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
/home/rocketmq/rocketmq-5.4.0/bin/mqadmin updateTopic -n nameserver:9876 -t rmq_dlq_invalid -c DefaultCluster -r 1 -w 1 -a +message.type=NORMAL &&
echo 'done'
"
depends_on: # Ensure broker is healthy before attempting topic creation
- broker
- nameserver
restart: "no" # This service should run once and then exit
# RocketMQ Dashboard (Web UI - Optional)
dashboard:
image: apacherocketmq/rocketmq-dashboard
platform: linux/amd64
container_name: rocketmq-dashboard
ports:
- "8080:8080" # Dashboard UI port
environment:
- NAMESRV_ADDR=nameserver:9876 # Connect to nameserver
depends_on:
- nameserver
- broker