延迟任务【黑马头条 - day05】

发布时间 2023-07-09 21:38:19作者: Rover20230226

一、相关介绍

  定时任务:由固定周期的,有明确的触发时间

  延迟任务:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟。

 

二、延迟任务的应用场景

 

三、技术对比

【DelayQueue】基于JVM

  JDK 自带 DelayQueue 是一个支持延时获取元素的阻塞队列,内部采用优先队列 PriorityQueue 存储元素,同时元素必须实现 Delayed 接口;在创建元素时可以指定多久才可以从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。

  使用 DelayQueue 作为延迟任务,如果程序挂掉之后,任务都是放在内存,消息会丢失,如何保证数据不丢失。

 

【RabbitMQ 实现延迟任务】TTL+死信队列(常用)

  TTL:Time To Live(消息存活时间)

  死信队列:Dead Letter Exchange(死信交换机),当消息成为 Dead message 后,可以重新发送另一个交换机(死信交换机)

 【redis 实现】zset 特性(常用)

   zset 数据类型的去重有序(分数排序)特点进行延迟。例如:时间戳(毫秒值)作为 score 进行排序