更新 MQ/RocketMQ.md

This commit is contained in:
8ga 2025-03-20 14:53:47 +08:00
parent 624cf34a36
commit e99016b832

View File

@ -9,18 +9,18 @@
# 普通消息的使用场景
## 微服务解耦
##### 微服务解耦
<img width='80%' height='50%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb915eeaf-8ac8-42ff-bfc2-905e4ab977f9%2F%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D%25E6%2596%2587%25E4%25BB%25B6.png?table=block&id=fb776706-35ab-4cf0-bda9-7a4c254701d8&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1230&userId=&cache=v2'/>
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb915eeaf-8ac8-42ff-bfc2-905e4ab977f9%2F%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D%25E6%2596%2587%25E4%25BB%25B6.png?table=block&id=fb776706-35ab-4cf0-bda9-7a4c254701d8&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1230&userId=&cache=v2'/>
## 异步执行事件
##### 异步执行事件
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fec792ba7-93be-40f3-a9f2-3446d2969e2f%2F%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D%25E6%2596%2587%25E4%25BB%25B6_(1).png?table=block&id=40f2ec24-8403-41c9-8d46-5fc0e8054445&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1210&userId=&cache=v2'/>
## 数据集成
##### 数据集成
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F98d8ceec-6d68-4913-8103-c42edf6098b5%2F%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D%25E6%2596%2587%25E4%25BB%25B6_(2).png?table=block&id=60c47f48-b2af-49c7-909d-3357e8b80474&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1250&userId=&cache=v2'/>
## 普通消息的声明周期
## 生命周期
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F13489b45-1d77-4996-8214-527e381a9c4e%2Flifecyclefornormal-e8a2a7e42a0722f681eb129b51e1bd66.png?table=block&id=c46ce93e-1524-4bc8-b34b-2225989d23c7&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1420&userId=&cache=v2'/>
@ -42,7 +42,7 @@
- 必须设置在24小时范围内超过范围不生效
- 若设置在当前时间之前,服务端将立即投递
## 声明周期
## 生命周期
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F7a173aeb-b3f9-414a-a8cd-890dbff7b582%2Flifecyclefordelay-2ce8278df69cd026dd11ffd27ab09a17.png?table=block&id=62387da8-21ca-4e89-aaaa-270fac739290&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1420&userId=&cache=v2'/>
@ -57,14 +57,41 @@
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffdd6664e-9e1a-4df8-80cd-94be1e076e01%2F%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D%25E6%2596%2587%25E4%25BB%25B6.png?table=block&id=642c7b5a-3daf-4e4c-ae3e-1a956b0fd94f&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1420&userId=&cache=v2'>
顺序消息的关系是通过 Message Group 识别的,生产者发送顺序消息时,需要为每条顺序消息设置 Message Group。相同 Message Group 的消息遵循 FIFO 原则。所以有以下两个限制需要关注:
##### 注事事项
- 必须一个生产者一个 Message Group 才能保障顺序性,不同的生产者设置同一个 Message Group 是无法保证顺序性的
- 串行发送,使用多线程并行发送的话,也无法保障顺序性
顺序消息的关系是通过 Message Group 识别的,生产者发送顺序消息时,需要为每条顺序消息设置 Message Group相同 Message Group 的消息遵循 FIFO 原则。
## 存储逻辑
- 必须由同一个生产者投递,且投递到同一个 Message Group 才能保障顺序性
- 必须串行发送,多线程得保证顺序投递消息,建议用最简单的方式单线程串行发送
##### 存储逻辑
相同的消息组按照先后顺序存储到同一个队列,不同消息组的消息可以混在同一个队列,但是不一定连续。
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F06e52f53-0095-45dd-a346-209654cf591d%2Ffifomessagegroup-aad0a1b7e64089075db956c0eca0cbf4.png?table=block&id=a4c4ac4f-97dc-46c2-bf3d-26c1cfb4b242&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1360&userId=&cache=v2'>
# 事务消息
分布式和微服务应用中分布式事务是一个非常重要的组件传统的XA事务方案资源锁定范围大、并发度低。基于普通消息很难保障一致性因为普通消息没有协调提交、回滚的能力。而事务消息就是补充了普通消息的二阶段提交、与本地事务绑定的能力实现最终一致性。
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F68e35465-7640-4913-a656-64c7d7e96d33%2Ftransflow-0b07236d124ddb814aeaf5f6b5f3f72c.png?table=block&id=f4e11d34-a0f0-42bf-92e7-8b82fabbf41d&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1420&userId=&cache=v2'>
- 生产者发送消息到服务端
- 服务端将消息持久化向生产者返回Ack确认消息发送成功
- 此时消息被标记为"暂不能投递",这种消息叫做**半事务消息**
- 生产者继续执行本地事务,然后向服务端发送事务结果:提交/回滚
- 服务端收到事务结果后
+ 事务提交:把半事务消息让消费者可见,让消费者成功消费
+ 事务回滚:取消投递半事务消息
+ 生产者异常:如果生产者因为宕机或者重启造成不可用,或者服务端收到的事务结果是 Unknown 等异常情况
+ 事务悬挂:为了避免生产者异常造成事务悬挂,服务端将会对生产者主动发起回查,第一次检查默认间隔 60 秒支持自定义配置最多不能超过1个小时
+ 事务超时最多4个小时后超时超时将强制回滚
+ 事务回查:生产者收到服务端的回查,要检查本地事务的执行结果,服务端根据回查结果决定要不要发消息
## 生命周期
<img width='80%' src='https://silent-detective-d21.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fa5e72dd0-3092-47ab-985b-24bef8465623%2Flifecyclefortrans-fe4a49f1c9fdae5d590a64546722036f.png?table=block&id=203f6835-ad1b-48c0-a41f-dc1a186ad56d&spaceId=60569f3a-f166-46d7-9825-a6cdb259b284&width=1420&userId=&cache=v2'/>
## 注意事项
事务消息只保证**本地主分支事务**和**下游消息发送事务**的一致性,不能保证消息消费结果和上游事务的一致性。所以下游服务要保证自己的分支事务正确处理,并做好消费重试机制,宕机、重启这种短暂的不可用,可以直接利用服务端的重试机制。在消息提交到下游消费端处理完成之前,下游分支和上游事务之间的状态可能会不一致。因此,**事务消息仅适合接受异步执行的事务场景**。