干货-延时任务的一些详细说明

后台-系统设置-扩展变量-手机广告位-内容正文顶部

延时任务机制说明

架构说明

  延时任务:指定某日期执行某自定义任务

  思路为采用Rabbitmq中的死信转移队列的技术点实现。

  第一步向一个队列(具有xxxx属性)发送消息,这个队列的消息可以指定失效时间

  当失效发生时rabbbitmq会将此消息转移到另外的一个普通对列中,此时立刻被消费了,以此实现任务的延迟执行。

AMQP延时任务核心类图

  TimeTrigger触发器接口,对外提供定义延迟任务的接口,调用者直接面向此接口。

  目前只实现了基于RabbitMq的实现,如果有其他延时任务实现(如基于redis),面向此接口开发即可,定义新增、编辑、删除任务操作。

  RabbitmqTimeTrigger

  基于rabbitmq延时任务实现

  TimeTriggerConfig,rabbitmq配置

  TimeTriggerMsg,rabbitmq延时任务消息

执行器类图

  TimeTriggerConsumer延时任务消费者,负责延时任务的调用

  TimeTriggerExecuter延时任务执行器接口,自定义延时任务需要实现此接口

  PintuanTimeTriggerExecuter以拼团业务为例,延时任务执行的实现。

新增任务时序图

  步骤说明:

  1、新增延时任务,指定延时任务所需的参数(执行器beanName,执行器参数,执行日期,执行任务标识KEY)

  2、rabbitmq发送消息,将执行器以及参数封装

  3、写入redis,标识任务需要执行

  4、mq监听指定时间任务

  5、消费者获取redis的任务标识

  7、进行标识判断,如果判断无效,则不执行任务,return

  8、如果任务标识有效,则通过springbean容器获取执行器,执行execute方法

编辑任务流程图

  步骤说明:

  1、编辑延时任务,指定延时任务所需的参数(执行器,执行器参数,执行日期,执行任务标识KEY)

  2、删除redis中的任务标识,代表任务取消

  3、rabbitmq发送消息,将执行器以及参数封装

  4、写入redis,标识任务需要执行

  5、mq监听指定时间任务

  7、消费者获取redis的任务标识

  8、进行标识判断,如果判断无效,则不执行任务,return

  9、如果任务标识有效,则通过springbean容器获取执行器,执行execute方法

删除任务流程图

  步骤说明:

  1、删除延时任务,参数(执行任务标识KEY)

  2、删除redis中的任务标识,代表任务取消

  上述就是关于延时任务的内容了,想了解更多详情,可以持续关注易族智汇javashop,有任何问题,欢迎一起探讨。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

后台-系统设置-扩展变量-手机广告位-内容正文底部
留言与评论(共有 0 条评论)
   
验证码: