Skip to main content

延迟队列

David LiuAbout 1 min

延迟队列

https://blog.csdn.net/m0_56079407/article/details/125858748open in new window

实现方式

  • 基于死信:在队列里面,通过ttl
  • 基于插件:在交换机里面

应用场景

  1. 订单在十分钟之内未支付则自动取消
  2. 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒。
  3. 用户注册成功后,如果三天内没有登陆则进行短信提醒。
  4. 用户发起退款,如果三天内没有得到收处理则通知相关运营人员。
  5. 预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议

轮训和定时任务的缺点

  • 数据量小:可以采用每秒轮训实现上述功能(数据量大时会导致轮训瞬间处理太多)
  • 对时间要求不严格:那么可以每天凌晨跑定时任务来实现(例如生成一些日报)

对于大数据量、时效性强的场景,需要用到延迟队列

延迟队列的优点

  • 延迟功能有保障(时间要求严格)
  • 不会像轮训一样一瞬间处理太多

基于死信

基于死信队列

缺点:

  • 注意:由于队列的先进先出特性,只有当过期的消息到了队列的顶端(队首),才会被真正的丢弃或者进入死信队列。
  • 如果遇到不同的任务类型需要不同的延时的话,需要为每一种不同延迟时间的消息建立单独的消息队列。

基于插件

基于插件