Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第291p-第p293的内容
简介
seata无法使用在高并发场景,因为加了很多锁,相当于把并发变成了串口化了,所以这里我们在高并发场景不使用seata,使用最大努力通知型方法和可靠消息+最终一致性方案
这里使用消息队列来实现分布式事务(可靠消息+最终一致性方案)
最终一致性:几十分钟甚至一天解锁都可以的
使用rabbitmq的延时队列功能进行操作
使用mq的目的有: 解耦,削峰,提供并发等等
mq使用的是惰性检查机制,如果第一条消息是5分钟 5分钟之后才会来拿第一条消息,后面1分钟3分钟的都被挡上了,所以不要给消息加过期时间 使用第一种给队列加过期时间(即这个队列里的消息都是5分钟过期,这样永远不会挡住后面的,因为是按顺序执行的)
消费者监听这个死信队列 然后进行业务操作
重点:遵循一个服务一个交换机的原则
使用延迟队列
- 引入amqp包
可以使用amqpAdmin来创建交换机等信息,但是太麻烦了,所以我们写一个配置文件
这里是配置文件
第一个队列
第二个队列
创建交换机
创建绑定
rabbitmq存在某个队列的话,就不会新建
如果想修改队列的属性信息,需要删除重建
监听消息队列
引入延时队列是为了实现分布式事务的第四种方案的,延时队列的作用是实现最终数据一致性的
发送请求
发五个
收五个