golang rabbitmq 延迟队列
延迟队列
1 延迟队列的概念
延迟队列内部是有序的,延时队列中的元素是可以在指定时间到了之后取出和处理
2 延迟队列使用场景
- 订单在十分钟之内未支付,自动取消
- 新创建的店铺,如果在十天内没有上传过商品,则自动发送消息提醒
- 用户组成成功后,如果三天没有登陆,进行短信提醒
- 用户发起退款,如果三天内没有得到处理则通知相关运营人员
- 预定会议室,需要在预定的时间点前十分钟通知各个人员参加会议
订单系统,如果30分钟没有付款,自动修改订单状态
30 分钟
3 RabbitMQ中的 TTL
TTL : RabbitMQ 中一个消息或者队列属性,表名一条消息或者这个队列的所有消息的最大存活时间,单位是毫秒。也就是一条消息设置了 TTL 属性,或者进入了 设置 TTL 属性的队列,那么这条消息如果在 TTL 时间内没有被消费,就会变为 “死信”。如果同时配置队列 TTL 和 消息的 TTL , 那么较小的那个值将会被使用。
1 消息设置 TTL
2 队列设置TTL (使用居多)
创建队列的时候设置队列的 ”x-message-ttl“
3 两者的区别
如果设置队列的 TTL 属性,那么一旦消息过期,就会被队列丢弃(如果配置了私信队列就会被丢弃到死信队列中)。
消息设置 TTL , 消息即使过期,也不一定被放上丢弃。因为消息是否过期是在即将投递到消费者之前判定的。如果当前队列有验证的消息积压情况,则已经过期的消息
也许还能存货很长的时间,如果消息不设置 TTL,表示消息永远不会过期,如果 TTL 设置为0,表示除非此刻可以直接将改消息投递给消费者,否则该消息会被丢弃。
4 代码实现
1. 存在一个倒计时机制: time to live (ttl)
可以让单独的消息过期,也可以设置整个队列消息的过期时间 而rabbitmq会有限取两个值的最小
2. 当到达时间点的时候回触发一个发送消息的事件:Dead Letter Exchange (DLX)
x-dead-letter-exchange 将过期的消息发送到指定的 exchange 中 . x-dead-letter-routing-key 将过期的消息发送到自定的 route当中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!