码字不易,转载请注明出处!!
RocketMQ
RocketMQ 中文手册 链接
同类产品比较
对比
Kafka
、RocketMQ
、RabbitMQ
链接
windows 免安装部署 RocketMQ
服务端分为 NameServer 和 Broker 两个服务。可以另外单独部署可视化控制台界面。
- 下载包
- 启动 RocketMQ
- 配置环境变量
ROCKETMQ_HOME
为解压路径后bin
文件夹所在路径,如:D:\tool\RocketMQ\rocketmq-all-4.2.0-bin-release cmd
进入bin
文件夹,执行命令start mqnamesrv.cmd
启动 nameServercmd
进入bin
文件夹,执行命令start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
启动 broker- 这里的 -n 参数指定的是 nameServer 的地址端口
- 弹窗界面没有任何提示是正常的
- 提示:第二次启动失败时,删除C:/用户/对应账号文件夹/store 文件夹内容,然后重新启动。
- 配置环境变量
- 启动控制台界面
- 控制台为 SpringBoot 项目,解压后进入
rocketmq-externals\rocketmq-console\src\main\resources
文件夹,打开application.properties
进行配置server.port
= 控制台端口rocketmq.config.namesrvAddr
= nameServer地址端口,也可以启动控制台后在页面上配置。
- 进入
\rocketmq-externals\rocketmq-console
文件夹,执行mvn clean package -Dmaven.test.skip=true
,编译生成 target 文件 cmd
进入 target 文件夹,执行java -jar rocketmq-console-ng-1.0.0.jar
,启动控制台- 浏览器访问配置的端口地址
- 控制台为 SpringBoot 项目,解压后进入
RocketMQ 部署上云的坑
- 需要在
conf/broker.conf
文件指定brokerIP1=broker的地址
,并在启动broker
时-n
指定nameSrv
地址,-c
指定broker.conf
配置文件 - 上云的启动脚本举例:
nohup sh bin/mqnamesrv &
nohup sh bin/mqbroker -n nameSrv的IP:nameSrv的端口 -c conf/broker.conf &
- 如果遇到本地调试访问失败,上述两步的地址都要改成公网地址。
Spring消息 编程模型
-
常见生产者/消费者
- 生产者
RocketMQ
:RocketMQTemplate
RabbitMQ
:AmqpTemplate
ActiveMQ
/Artemis
:JmsTemplate
Kafka
:KafkaTemplate
- 消费者
RocketMQ
:@RocketMQMessageListener
RabbitMQ
:@RabbitListener
ActiveMQ
/Artemis
:@JmsListener
Kafka
:@KafkaListener
- 生产者
-
分布式事务(Spring消息编程模型 + RocketMQ 实现)
-
流程图
-
概念术语
- 半消息(half message):生产者暂时存放到 MQ Server,等待本地事务执行完毕后再决定是投递(Commit)还是丢弃(Rollback)的消息。
- 消息回查(message check back):网络等原因导致生产者丢失消息的二次确认,MQ Server 会对长时间处于半消息状态的的数据,主动向生产者发起最终状态的确认。
-
消息三态
RocketMQLocalTransactionState.UNKNOWN
(未知):等待二次确认或需要主动发起回查的消息状态。RocketMQLocalTransactionState.COMMIT
(提交):二次确认或回查成功,提交消费者的状态。RocketMQLocalTransactionState.ROLLBACK
(回滚):二次确认或回查失败,需要丢弃的状态。
-
注意
- 消息回查的功能在
V4.3.0
版本才开始使用,之前的版本不会生效。
- 消息回查的功能在
-
SpringCloudStream 编程模型
-
基本概念
- Destination Binder(目标绑定器)
- 集成 SpringCloudStream 框架后在应用外围包裹的一个组件,用于与消息中间件通信。
- Destination Bindings(目标绑定)
- 由 Binder 创建的桥梁,用于消息的生产和消费。
- Message(消息)
- Bindings 上传递的内容。
- Destination Binder(目标绑定器)
-
自定接口实现和直接注入自带的
Source.class
/Sink.class
的区别- 没有区别,自定义实现的代码和自带类的源码是一模一样的,都是在启动类上加注解的时候注入了这个类,并通过
@Output
和@Input
的值与配置文件去匹配,所以配置文件中的名字要和类里的名字一样。 - 除了
Source.class
和Sink.class
之外,还有个Processor.class
,它继承了Source.class
和Sink.class
,可以同时作为生产者和消费者。
- 没有区别,自定义实现的代码和自带类的源码是一模一样的,都是在启动类上加注解的时候注入了这个类,并通过
-
过滤消息
- 可以通过设置
@StreamListener
中的condition
参数,达到只接收符合条件的消息。 - rocketmq 还支持 tags 和 sql 的方式过滤消息,这两种方式只有 rocketmq 支持。
- 可以通过设置
-
异常处理
@StreamListener("errorChannel")
-
监控
- spring-cloud-stream 提供了三个 actuator 端点进行监控:
- /actuator/bindings
- /actuator/channels
- /actuator/health
- spring-cloud-stream 提供了三个 actuator 端点进行监控:
-
分布式事务(SpringCloudStream 编程模型 + RocketMQ 实现)
- 整体流程和Spring消息编程相同(干扰代码,不再写 demo 测试)
本文是对知识点的整理归纳,方便后续翻阅回忆