RocketMQ的安装和配置
RocketMQ的安装和配置
GodProgrammerMan一、RocketMQ 的介绍
RocketMQ
Apache RocketMQ 是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。
RocketMQ 概念
- Producer(生产者):
生产者负责生成并发送消息到消息队列。通常,生产者是业务系统的组件,例如订单处理系统生成订单消息并发送到队列中。 - Consumer(消费者):
消费者从消息队列中获取并处理消息。消费者可以是多个,并且可以分为两种类型:
Push Consumer:主动接收消息。
Pull Consumer:主动从队列中拉取消息。 - Topic(主题):
Topic 是消息的逻辑分类,每个 Topic 代表一个消息类别。生产者将消息发送到特定的 Topic,消费者订阅并消费特定 Topic 下的消息。 - Message(消息):
消息是 RocketMQ 传输的最小单位。消息体可以是任意的字节数组,通常为 JSON、XML 或其他序列化格式。 - Broker(消息代理):
Broker 是消息中间件的核心组件,负责接收、存储、转发消息。Broker 通过 Topic 和队列管理消息,并确保消息的可靠传输。 - NameServer:
NameServer 是轻量级的服务发现和路由管理组件,Broker 和生产者、消费者通过它来发现彼此的地址,并完成消息的路由。 - Queue(队列):
每个 Topic 可以有多个队列(Partition),消息会根据一定的策略分发到不同的队列中。多个消费者可以并行消费同一个 Topic 下的不同队列,提高吞吐量。 - Tag(标签):
Tag 是用于对消息进行进一步分类的标记,帮助消费者过滤消息。例如,在一个 Topic 下,可以根据不同的标签过滤出特定类型的消息进行消费。 - Order Message(顺序消息):
顺序消息是 RocketMQ 提供的一种消息投递方式,保证同一生产者发送的消息按顺序到达同一消费者。 - Transactional Message(事务消息):
RocketMQ 支持分布式事务消息。生产者可以发送半消息(half message),消费者暂时不会消费,直到生产者确认事务提交,RocketMQ 才会将消息推送给消费者。
- Producer(生产者):
为什么 RocketMQ
在阿里孕育 RocketMQ 的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量的上升,源自我们的消息传递集群的压力也变得紧迫。
根据我们的研究,随着队列和虚拟主题使用的增加,ActiveMQ IO 模块达到了一个瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是我们尝试了流行的消息传递解决方案 Kafka。不幸的是,Kafka 不能满足我们的要求,其尤其表现在低延迟和高可靠性方面,详见下文。在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的消息用例,覆盖从传统的 pub/sub 场景到高容量的实时零误差的交易系统。
Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。
二、RocketMQ 的安装
本地部署
下载地址Window
下载完后解压到自定义目录,MQ 解压路径\rocketmq-all-5.3.0-bin-release;注意 (Windows11 系统解压路径不要出现空格)
注意 ( 同时安装的 jdk 路径也不能有空格,不然会提示启动 NameServer 会出现“此时不应有 XXXX”XX:JDK 路径)
配置环境变量
配置环境变量,变量名:ROCKETMQ_HOME 变量值:(你的解压路径);path 后追加;%ROCKETMQ_HOME%\bin
启动 NameServer
可启动 cmd 命令执行进入至‘安装的 MQ 目录\bin’下,执行命令‘start mqnamesrv.cmd’,启动 NAMESERVER。成功后会弹出提示框;
或直接使用 mqnamesrv.cmd 双击运行//RockerMQ 配置 Broker 密码
在 rocketMQ 安装目录下的 conf 文件夹-broker.conf,设置
brokerPermission=password //开启密码plainTextAccessKey=root //设置账户名
plainTextSecretKey=123456 //设置密码启动 Broker
在安装目录 bin 下 cmd1
start mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
进入至‘MQ 文件夹\bin’下,修改 runbroker.cmd 中 JVM 占用内存大小
启动后窗口不可关闭。也可以看设置服务启动。rocketmq 控制台安装及配置
下载地址
解压后,修改源码中 src 里面的 application.properties 配置文件 端口号:19876(防止端口冲突 9876 为 mq 端口)
同时添加密码检验,如果没有设置密码则不用修改1
2
3
4#set the accessKey and secretKey if you used acl
rocketmq.config.accessKey=root
rocketmq.config.secretKey=123456
rocketmq.config.useTLS=true
1
2
3
4进入解压根目录执行 mvn 打包命令
```shell
mvn clean package -Dmaven.test.skip=true生成的 target 下将有 rocketmq-dashboard-1.0.0.jar 包。
RocketMQ 注册为 Windows 服务
下载地址在 RocketMQ 目录上新建文件夹 admin,并将上述生成的 rocketmq-dashboard-1.0.0.jar 包放入其中
同时在根目录新建文件 start.bat
1
2
3start .\bin\mqnamesrv.cmd
start .\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
java -jar .\admin\rocketmq-dashboard-1.0.0.jar
nssm 下载后解压,选择相应的系统,并在目录上执行:nssm install RocketMQ
选择
并确定即可启动服务Linux
这里以在 Linux 环境下利用社区 5.3.0 的源码包为例,介绍 RocketMQ 安装过程。
解压 5.3.0 的源码包并编译构建二进制可执行文件1
2
3
4unzip rocketmq-all-5.3.0-source-release.zip
cd rocketmq-all-5.3.0-source-release/
mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U
cd distribution/target/rocketmq-5.3.0/rocketmq-5.3.0启动服务
1
2
3
4
5
6## 启动namesrv
nohup sh bin/mqnamesrv &
## 验证namesrv是否启动成功
tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
Docker 部署 RocketMQ
拉取 RocketMQ 镜像
1
docker pull apache/rocketmq:5.3.0
创建容器共享网络
1
docker network create rocketmq
启动 NameServer
1
2
3
4
5启动 NameServer
docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.3.0 sh mqnamesrv
验证 NameServer 是否启动成功
docker logs -f rmqnamesrv启动 Broker+Proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16配置 Broker 的IP地址
echo "brokerIP1=127.0.0.1" > broker.conf
启动 Broker 和 Proxy
docker run -d \
--name rmqbroker \
--network rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v ./broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf \
apache/rocketmq:5.3.0 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf
验证 Broker 是否启动成功
docker exec -it rmqbroker bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log"
Docker Compose 部署 RocketMQ
- 编写 docker-compose
为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。
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
28version: '3.8'
services:
namesrv:
image: apache/rocketmq:5.3.0
container_name: rmqnamesrv
ports: - 9876:9876
networks: - rocketmq
command: sh mqnamesrv
broker:
image: apache/rocketmq:5.3.0
container_name: rmqbroker
ports: - 10909:10909 - 10911:10911 - 10912:10912
environment: - NAMESRV_ADDR=rmqnamesrv:9876
depends_on: - namesrv
networks: - rocketmq
command: sh mqbroker
proxy:
image: apache/rocketmq:5.3.0
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- 启动 RocketMQ 集群
linux
1
docker-compose up -d
window
1
docker-compose -p rockermq_project up -d
- 编写 docker-compose
三、RocketMQ 的特点
- 高吞吐量:RocketMQ 通过队列和分布式架构支持大规模并发消息处理,适用于高吞吐量的场景。
- 低延迟:支持毫秒级的消息投递延迟,适合对时效性要求高的应用。
- 高可用性和持久性:通过多副本机制和日志文件存储,保证消息在异常情况下不丢失,并能够快速恢复。
- 消息的顺序性:支持消息按发送顺序消费,确保某些场景下的消息顺序不被打乱。
- 分布式事务支持:RocketMQ 提供的事务消息,可以保证分布式系统中的数据一致性。
四、RocketMQ 的场景
- 异步处理:例如订单处理系统,在订单生成后异步发送订单消息到消息队列,进行后续处理,如库存更新、通知等。
- 事件驱动架构:利用消息队列实现微服务之间的解耦,通过事件触发服务间的通信。
- 日志收集:在分布式系统中,消息队列可以用于日志的收集和聚合,方便后续分析和处理。
- 流量削峰填谷:在高并发场景中,消息队列可以用来削峰填谷,将请求平滑地分发到后端处理。