[发明专利]一种多策略实现延时队列的方法及系统在审
申请号: | 202210117195.2 | 申请日: | 2022-02-08 |
公开(公告)号: | CN114443313A | 公开(公告)日: | 2022-05-06 |
发明(设计)人: | 李承林;徐士强;董玉全 | 申请(专利权)人: | 浪潮云信息技术股份公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52;G06F9/54;G06F16/2455;G06F16/2458 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 陈婷婷 |
地址: | 250100 山东省济南市高*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 策略 实现 延时 队列 方法 系统 | ||
1.一种多策略实现延时队列的方法,其特征在于,基于系统已集成了redis,并实现了redis的zset新增、删除、查询的操作,该方法的实现包括:
消息实例,一条消息包括消息topic、消息体、延时时间、消费次数和消费异常处理类型;
消息产生,根据业务需要封装消息实例,设置topic、消息体、延时时间、消费次数、消费异常处理类型,通过redis的工具方法将消息放入zset;
消息消费,新建定时任务,定时任务执行间隔时间为消息消费间隔时间;
消费策略,包括消费方法横向多策略和消费方法纵向多策略:
消费方法横向多策略,每一种topic的消息可认作是同一种类型的消息,根据不同的topic进入不同的策略类,进行不同的消费逻辑;
消费方法纵向多策略,当一条消息被一个消费方法进行消费,如果业务处理一次成功,则将消息完全消费即可;如果业务处理失败,可根据消费异常处理类型进行不同的业务处理。
2.根据权利要求1所述的一种多策略实现延时队列的方法,其特征在于所述topic,即消息主题,可设置多个topic,每个topic对应一个消息消费方法;
所述消息体,即消息的主要内容,消息消费方法根据消息体的内容处理业务,最终实现消息的完全消费;
所述延时时间,设为毫秒数,则消息产生后最早在延时时间毫秒后被消费,若延时时间为空,则为立即消费;
所述消费次数:理想场景一条消息只会被消费一次,但如果一个消息一次消费业务没有处理成功,又不想将当前消息彻底消费或者丢弃掉,则可使用消费次数,即当前消息最多被消费的次数;
消费异常处理类型:当消息消费异常时,针对当前消息的处理类型处理,包括丢弃、循环消费、延时消费、指定次数消费、指定次数延时消费。
3.根据权利要求1或2所述的一种多策略实现延时队列的方法,其特征在于所述消息产生,key为消息的topic,value为当前消息的json串,score为当前系统毫秒数加上消息延时时间毫秒数。
4.根据权利要求1所述的一种多策略实现延时队列的方法,其特征在于所述定时任务,种类包括ApplicationRunner、Quartz、xxljob单机或分布式定时任务。
5.根据权利要求1或4所述的一种多策略实现延时队列的方法,其特征在于,所述消息消费,首先定义当前系统topic集合,该集合包含所有消息产生的topic;定时任务根据不同的topic获取redis的zset值,score为当前系统时间毫秒数,如果获取到,则说明有消息延时时间已到,则调用消息消费方法进行消息消费;
业务处理完成则调用redis工具类的删除方法将该值从redis的zset里移除,即完成了当前消息的完全消费。
6.根据权利要求1或2所述的一种多策略实现延时队列的方法,其特征在于,所述消费方法横向多策略,为了避免同一条消息被多个消费者消费,消费消息时加锁,可为非阻塞锁,包括redis锁,用于保证每一条消息只被一个消费者消费掉。
7.根据权利要求1或2所述的一种多策略实现延时队列的方法,其特征在于,所述消费方法纵向多策略,
当消费异常处理类型为丢弃,则在业务处理失败后将消息直接消费掉;
当消费异常处理类型为循环消费,则在业务处理失败后再次进行业务处理,直到业务处理成功后将消息消费;
当消费异常处理类型为延时消费,则在业务处理失败后再次设置当前消息的score,放回消息队列,等待下一次消费;
当消费异常处理类型为指定次数消费,则在业务处理失败后再次进行业务处理,每处理失败一次,消息的消费次数减一,直到归零,此时不管业务是否处理成功,都将消息完全消费掉;
当消费异常处理类型为指定次数延时消费,则在业务处理失败后再次设置当前消息score,并设置消息消费次数减一,放回消息队列等待下一次消费,当被消费时业务处理再次失败则判断消费次数是否归零,如果归零则不再进下一次消费,直到将消息完全消费掉。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮云信息技术股份公司,未经浪潮云信息技术股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210117195.2/1.html,转载请声明来源钻瓜专利网。