快速部署开发使用的 RocketMQ

本文使用 RocketMQ 4.5.0

本文所使用的配置文件,在GiHub项目中 https://github.com/aidansu/spring-cloud-alibaba-components-install

本文部署的是开发环境,用于开发测试,并不是高可用的生产环境!

RocketMQ 是一款具有低延迟,高性能和可靠性的分布式消息中间件,最初由阿里团队研发并大规模应用于生产系统,在2016年底捐赠给 Apache 开源基金会成为孵化项目,经过不到一年时间正式成为了Apache顶级项目;RocketMQ 和 Kafka 在概念和原理上都非常相似,所以也经常被拿来对比;官方也给出了 ActiveMQ、Kafka 和 RocketMQ 的对比:http://rocketmq.apache.org/docs/motivation/

官方有提供 RocketMQ 的安装教程,地址:http://rocketmq.apache.org/docs/quick-start/ 。本文将不再重复官方的安装方式,直接给出 docker-compose 和 kubernetes 的安装方式,其中 rocketmq 的 docker 镜像采用官方提供的:apacherocketmq/rocketmq:4.5.0(这已经是官方最低版本的镜像了),rocketmq-console 的 docker 镜像官方只提供一个版本:apacherocketmq/rocketmq-console:2.0.0,很不幸,这个版本是有 Bug 的,我在使用过程中遇到了这个BUG,并发现有人已经提交了Issues,地址:https://github.com/apache/rocketmq-externals/issues/614 。于是我根据源代码构建了一个 rocketmq-console 1.0.1版本的镜像,镜像地址:aidansu/rocketmq-console:1.0.1

docker-compose 部署 RocketMQ

下载配置文件,进入 /rocketmq/docker 文件夹,以下是 docker-compose.yaml 的设置,从配置中可以看到启动了3个服务,分别是 NameServer、Broker Server 和 Rocketmq-Console。

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
version: '2'
services:
rmqnamesrv:
image: apacherocketmq/rocketmq:4.5.0
container_name: rmqnamesrv
restart: always
ports:
- 9876:9876
volumes:
- ./data/logs:/opt/logs
- ./data/store:/opt/store
command: sh mqnamesrv
rmqbroker:
image: apacherocketmq/rocketmq:4.5.0
container_name: rmqbroker
restart: always
ports:
- 10909:10909
- 10911:10911
volumes:
- ./data/logs:/opt/logs
- ./data/store:/opt/store
command: sh mqbroker -n rmqnamesrv:9876
environment:
- NAMESRV_ADDR= rmqnamesrv:9876
- JAVA_OPTS= -Duser.home=/opt
- JAVA_OPT_EXT= -server -Xms128m -Xmx1024m -Xmn128m
depends_on:
- rmqnamesrv
rmqconsole:
image: aidansu/rocketmq-console:1.0.1
container_name: rmqconsole
restart: always
ports:
- 30875:8080
environment:
- JAVA_OPTS= -Drocketmq.config.namesrvAddr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
depends_on:
- rmqnamesrv

kubernetes 部署 RocketMQ

进入 /rocketmq/kubernetes 文件夹,有两个文件,分别是 rocketmq.yaml 和 rocketmq-console.yaml; 下面将分别列出这两个文件的配置。

rocketmq.yaml 的配置

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
apiVersion: v1
kind: Service
metadata:
name: rocketmq
labels:
app: rocketmq
spec:
type: NodePort
ports:
- port: 9876
targetPort: 9876
nodePort: 30876
name: rocketmq
selector:
app: rocketmq
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: rocketmq
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq
name: rocketmq
template:
metadata:
labels:
app: rocketmq
name: rocketmq
spec:
containers:
- name: rocketmq
image: apacherocketmq/rocketmq:4.5.0
imagePullPolicy: IfNotPresent
command: ["sh","mqnamesrv"]
ports:
- containerPort: 9876
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: rocketmq-broker
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-broker
name: rocketmq-broker
template:
metadata:
labels:
app: rocketmq-broker
name: rocketmq-broker
spec:
containers:
- name: rocketmq-broker
image: apacherocketmq/rocketmq:4.5.0
imagePullPolicy: IfNotPresent
command: ["sh","mqbroker", "-n","rocketmq:9876"]
ports:
- containerPort: 10909
- containerPort: 10911

rocketmq-console.yaml 的配置

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
apiVersion: v1
kind: ConfigMap
metadata:
name: rocketmq-console-config
data:
users.properties: |
rocketmq=rocketmq,1
---
apiVersion: v1
kind: Service
metadata:
name: rocketmq-console
labels:
app: rocketmq-console
spec:
type: NodePort
ports:
- port: 8080
name: server
targetPort: 8080
nodePort: 30875
selector:
app: rocketmq-console
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: rocketmq-console
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-console
name: rocketmq-console
template:
metadata:
labels:
app: rocketmq-console
name: rocketmq-console
spec:
volumes:
- name: rocketmq-console-conf
configMap:
name: rocketmq-console-config
containers:
- name: rocketmq-console
image: aidansu/rocketmq-console:1.0.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: client
env:
- name: TZ
value: Asia/Shanghai
- name: JAVA_OPTS
value: -Drocketmq.config.namesrvAddr=rocketmq:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
# -Drocketmq.config.loginRequired=true 是否开启登录验证,如果开启账号:rocketmq;密码:rocketmq
volumeMounts:
- name: rocketmq-console-conf
mountPath: "/tmp/rocketmq-console/data/users.properties"
subPath: users.properties

通过 kubectl apply 启动 RocketMQ 和 RocketMQ-Console

1
2
3
4
# cd 到 rocketmq/kubernetes 目录
$ cd rocketmq/kubernetes
$ kubectl apply -f rocketmq.yaml
$ kubectl apply -f rocketmq-console.yaml

打开 rocketmq-console 控制台

1
2
3
4
地址:http://localhost:30875/
# 如果开启登录验证
# 用户:rocketmq
# 密码:rocketmq
坚持原创技术分享,您的支持将鼓励我继续创作!