当前位置:网站首页>延迟队列MQ
延迟队列MQ
2022-07-30 08:26:00 【一个风轻云淡】
延迟队列概念
延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。
延迟队列使用场景
1.订单在十分钟之内未支付则自动取消
2.新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒。
3.用户注册成功后,如果三天内没有登陆则进行短信提醒。
4.用户发起退款,如果三天内没有得到处理则通知相关运营人员。
5.预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议

这些场景都有一个特点,需要在某个事件发生之后或者之前的指定时间点完成某一项任务,如:发生订单生成事件,在十分钟之后检查该订单支付状态,然后将未支付的订单进行关闭;看起来似乎使用定时任务,一直轮询数据,每秒查一次,取出需要被处理的数据,然后处理不就完事了吗?如果数据量比较少,确实可以这样做,比如:对于“如果账单一周内未支付则进行自动结算”这样的需求,如果对于时间不是严格限制,而是宽松意义上的一周,那么每天晚上跑个定时任务检查一下所有未支付的账单,确实也是一个可行的方案。但对于数据量比较大,并且时效性较强的场景,如:“订单十分钟内未支付则关闭“,短期内未支付的订单数据可能会有很多,活动期间甚至会达到百万甚至千万级别,对这么庞大的数据量仍旧使用轮询的方式显然是不可取的,很可能在一秒内无法完成所有订单的检查,同时会给数据库带来很大压力,无法满足业务要求而且性能低下。
RabbitMQ中的TTL
TTL是什么呢?TTL是RabbitMQ中一个消息或者队列的属性,表明一条消息或者该队列中的所有消息的最大存活时间,
单位是毫秒。换句话说,如果一条消息设置了TTL属性或者进入了设置TTL属性的队列,那么这条消息如果在TTL设置的时间内没有被消费,则会成为"死信"。如果同时配置了队列的TTL和消息的TTL,那么较小的那个值将会被使用,有两种方式设置TTL。
消息设置TTL
一种方式便是针对每条消息设置TTL

一种是在创建队列的时候设置队列的“x-message-ttl”属性

两者的区别
如果设置了队列的TTL属性,那么一旦消息过期,就会被队列丢弃(如果配置了死信队列被丢到死信队列中),而第二种方式,消息即使过期,也不一定会被马上丢弃,因为消息是否过期是在即将投递到消费者之前判定的,如果当前队列有严重的消息积压情况,则已过期的消息也许还能存活较长时间;另外,还需要注意的一点是,如果不设置TTL,表示消息永远不会过期,如果将TTL设置为0,则表示除非此时可以直接投递该消息到消费者,否则该消息将会被丢弃。
想想看,延时队列,不就是想要消息延迟多久被处理吗,TTL则刚好能让消息在延迟多久之后成为死信,另一方面,成为死信的消息都会被投递到死信队列里,这样只需要消费者一直消费死信队列里的消息就完事了,因为里面的消息都是希望被立即处理的消息。
边栏推荐
- 用示波器揭示以太网传输机制
- ES报错处理-mapper [xx.xx] of different type, current_type [text], merged_type [keyword]
- [Unity]UI切换环形滚动效果
- 利用R语言读取csv文件入一个数据框,然后查看各列的属性。
- Taosi TDengine 2.6+ optimization parameters
- Integral Topic Notes - Path Independent Conditions
- PCB板加工流程中哪些因素会影响到传输线阻抗
- 研发转至FAE(现场应用工程师),是否远离技术了?有前途吗?
- How to run dist file on local computer
- 编程界的“躲猫猫”比赛 | 每日趣闻
猜你喜欢
随机推荐
深入浅出零钱兑换问题——背包问题的套壳
MySQL Explain 使用及参数详解
经历了这样一个阶段的发展之后,数字零售才能有新的进化
【Flask框架②】——第一个Flask项目
leetcode-990:等式方程的可满足性
qsort 函数的使用及其模拟实现
反射技巧让你的性能提升 N 倍
Reflection tricks can boost your performance by N times
How to implement Golang DES encryption and decryption?
Unity性能分析 Unity Profile性能分析工具
看完这100个客户需求,我终于知道企业文档管理的秘密
开关电源波纹的产生、测量及抑制,一篇全搞定!
hcip第八天
ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力
jdbc ResultSetMetaData获取tableName问题
C language classic practice questions (3) - "Hanoi Tower (Hanoi)"
用示波器揭示以太网传输机制
ACL 2022 | Introduce angular margin to construct comparative learning objectives and enhance text semantic discrimination ability
七大排序之直接选择排序
剖析SGI STL空间配置器(allocate内存分配函数)


![[Yugong Series] July 2022 Go Teaching Course 021-Slicing Operation of Go Containers](/img/ff/f3de4952d64afe36c515a2220bfe9d.png)
![[Unity]UI切换环形滚动效果](/img/8d/5d139369285f3c49e3695d96c81d60.png)





