应用场景:大型电商订单支付
消息的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小时内删除。
留言与评论(共有 0 条评论) |