RabbitMQ延时队列实现分布式事务的最终一致性方案

阅读: 评论:0

RabbitMQ延时队列实现分布式事务的最终一致性方案

RabbitMQ延时队列实现分布式事务的最终一致性方案

应用场景:大型电商订单支付

消息的TTL(Time To Live)

 死信路由Dead Letter Exchanges(DLX)

延时队列实现1 

生产者发送消息给交换机 携带路由键ssage

交换机将其转发给delay队列  无人监听这个队列

该队列设置消息存活时间是5分钟 到期转发给指定的路由件hange 消息的key是ssage

delay交换机接受到消息后继续转发给与其绑定的test队列

消费者通过监听test队列,就可以获得这个消息

这样就成功设置了5分钟延迟的队列消息

延时队列实现2

生产者发送一个设置了5分钟过期的消息给死信路由

无人监听该死信路由,等消息过期了将其转发给delay交换机

delay交换机将消息发送到test队列

消费者监听test队列获得消息

推荐使用第一种方案给队列设置过期时间,因为rabbitMQ采用的是惰性检查机制 如果使用第二种模式让消息自己过期就会出现以下情况:

发送三条消息 分别A 5分钟过期 B 1分钟过期 C 1秒过期 顺序进入队列

rabbitMQ检查第一个消息A为5分钟后过期就等5分钟后再来转发 导致后面的B C消息即使过期了也阻塞在队列中,等下次rabbitMQ将A转发后才能被立马转发出去 导致时间精确问题

延迟队列案例实战

 业务逻辑:

1.生产者下单服务发送一条消息给order-event-exchange 携带路由键为der

注意:rabbitMQ只要生成队列,修改配置属性 重启项目 配置发生变化也无法覆盖 建议删除重新生成

 封装rabbitMQ属性类

定义两个 队列

 定义交换机以及绑定两个队列

运行 交换机和队列都创建成功

 发送消息 

 

死信队列收到消息  1分钟后会将消息转回给交换机 交换机将其发给lease.queue队列

消费者监听这个队列就能获取到消息

 这样就实现了一个简单的通过死信队列来达到延迟消息的效果

本文发布于:2024-02-01 01:45:34,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170672313532963.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:队列   分布式   事务   方案   RabbitMQ
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23