公开/公告号CN114840320A
专利类型发明专利
公开/公告日2022-08-02
原文格式PDF
申请/专利权人 点都互联科技有限公司;
申请/专利号CN202210523111.5
发明设计人 李宗奎;
申请日2022-05-14
分类号G06F9/48(2006.01);
代理机构郑州智多谋知识产权代理事务所(特殊普通合伙) 41170;
代理人尚秘
地址 450000 河南省郑州市郑东新区平安大道与湖心岛路交叉口博雅广场1号楼5层502号
入库时间 2023-06-19 16:14:25
法律状态公告日
法律状态信息
法律状态
2022-08-19
实质审查的生效 IPC(主分类):G06F 9/48 专利申请号:2022105231115 申请日:20220514
实质审查的生效
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于RabbitMQ的定时任务自动生产和消费的方法。
背景技术
在软件开发中经常有需要精确到分钟,但没有规律的队列任务生产和消费的业务需求和技术开发。因为没有任何规律,任务的创建和消费时间都是任意的,所以需要使用内部或者外部定时器;在一定时间段内,如每分钟,核查是否存在需要创建或消费的任务。常见的,在日常软件开发过程中,常常会遇到一些场景,需要在某个事件发生之后的指定时间点完成某一项任务,或者是每隔一定周期处理一次某任务。如:当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存;如何定期检查处于退款状态的订单是否已经退款成功,等等。
常见的技术方案为设置定时器。定时器的优势是处理有规律任务的生产和消费;对于没有规律的任务处理,只能以要求的最小单位时间精度,去规律的检查;相应的导致,对于时间精度要求到分钟、甚至更低级别的任务调度,极大的浪费了计算资源,同时还会影响外部业务的计算负载。
为解决以上问题,最简单直接的办法是定时扫表;通过使用定时任务,一直轮询查询数据库来判断是否有任务需要执行。也就是说,不管怎样都需要先查询数据库。对于对时间准确要求比较高的任务,需要每秒查询一次;小系统倒是无所谓,如果系统本身就大、数据较多、时效性较强的情况下,继续使用轮询方式,就不大现实了。且很难保证时效性;同时,会给数据库带来很大压力,影响其它业务正常执行。
因此,需要研发一种定时任务的处理方法,以解决现有技术中使用传统定时任务轮询数据,导致时效性不稳定,以及资源消耗较多造成的数据库压力大、性能降低等问题。
发明内容
本发明的目的是为了解决现有技术中,传统定时任务轮询数据,时效不稳定、数据库压力大、性能降低的问题,而提出的一种基于RabbitMQ的定时任务自动生产和消费的方法。
为了实现上述目的,本发明采用了如下技术方案:
一种基于RabbitMQ的定时任务自动生产和消费的方法,包括以下步骤:
S1,解析任务调度规则,设置消息延迟属性;
S2,判断、创建延迟交换机;
S3,消息投递至延迟交换机;
S4,消息路由至任务队列;
S5,任务执行器消费;
S6,若失败,判断是否重试执行。
优选的:
在步骤S1中,根据设定的任务调度规则,获得对应该任务调度消息发布的延迟时间算法,设置消息延迟属性;
在步骤S2-S4中,根据任务调度规则,自动生成任务消息路由算法;
在步骤S5中,任务执行器自动扫描绑定算法;
在步骤S6中,根据任务调度规则设定的延迟消息投递消费可靠性算法。
优选的,在步骤S1中:
延迟时间算法,通过解析任务调度规则中的执行时间,动态计算未来时间,设置消息延迟属性。
优选的:
在步骤S2中:
消息路由算法,通过解析任务调度规则中的任务执行主题,判断是否存在对于该任务执行的延迟交换机;
若存在,则不需要创建;若不存在,则自动创建延迟交换机;
在步骤S3中:
基于延迟时间算法,将消息投递至对应的延迟交换机;
在步骤S4中:
到达任务执行时间时,交换机将消息路由到对应的任务队列中,供任务执行器消费。
优选的,在步骤S5中:
通过扫描解析任务执行器配置,动态创建任务执行队列、绑定任务执行器,自动执行任务。
优选的,在步骤S5中:
若消息消费成功,则结束任务调度;否则,跳转至步骤S6。
优选的,在步骤S6中:
根据延迟消息消费可靠性算法,来判断任务是否重试执行。
优选的,在步骤S6中:
消息可靠性算法,通过消息持久化、发布确认、手动应答的方式来实现消息持久化;
默认所有消息、队列、交换机设置为异步持久化,以此来保证服务端消息不丢失。
优选的,在步骤S6中:
通过解析任务调度规则,来定义发布确认规则、手动应答规则中的重试策略;
其中,任务消息发布失败和任务执行失败后,匹配完毕重试次数;到达指定次数后,将消息持久化落盘。
优选的,所述任务调度规则,包括:
1)、任务执行时间;
2)、任务执行主题;
3)、任务延迟消息;
4)、任务失败重试次数;
5)、任务是否持久化。
与现有技术相比,本发明提供了一种基于RabbitMQ的定时任务自动生产和消费的方法,具备以下有益效果。
1、本发明,用延迟队列实现的定时任务的自动生产和消费策略,来代替传统定时任务执行;能够减少系统资源浪费、提高性能,大幅度提高任务执行时效性。
2、本发明,通过消息可靠性保证了任务执行的可靠性;任务执行异步化和执行回调策略,使任务执行更加提升了系统吞吐量和灵活度。
本发明的其他优点、目标和特征,在某种程度上将在随后的说明书中进行阐述;并且在某种程度上,基于对下文的考察研究,对本领域技术人员而言将是显而易见的;或者,可以从本发明的实践中得到教导。
附图说明
图1为本发明的流程示意图。
图2为延迟消息生产消费流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
参照图1-2,一种基于RabbitMQ的定时任务自动生产和消费的方法,包括以下步骤:
S1,解析任务调度规则,设置消息延迟属性;
S2,判断、创建延迟交换机;
S3,消息投递至延迟交换机;
S4,消息路由至任务队列;
S5,任务执行器消费;
S6,若失败,判断是否重试执行。
其中,任务调度规则,包括以下信息:
1)、任务执行时间;
2)、任务执行主题;
3)、任务延迟消息;
4)、任务失败重试次数;
5)、任务是否持久化。
在步骤S1中,根据设定的任务调度规则,获得对应该任务调度消息发布的延迟时间算法,设置消息延迟属性。
在步骤S2-S4中,根据任务调度规则,自动生成任务消息路由算法。
在步骤S5中,任务执行器自动扫描绑定算法。
在步骤S6中,根据任务调度规则设定的延迟消息投递消费可靠性算法。
具体的,在步骤S1中:
延迟时间算法,通过解析任务调度规则中的执行时间,动态计算未来时间,将其绑定到任务执行消息属性上,设置消息延迟属性。
在步骤S2中:
消息路由算法,通过解析任务调度规则中的任务执行主题,判断是否存在对于该任务执行的延迟交换机。
若存在,则不需要创建;若不存在,则自动创建延迟交换机。
在步骤S3中:
基于延迟时间算法,将消息投递至对应的延迟交换机。
在步骤S4中:
到达任务执行时间时,交换机将消息路由到对应的任务队列中,供任务执行器消费。
在步骤S5中:
通过扫描解析任务执行器配置,动态创建任务执行队列、绑定任务执行器,自动执行任务。
若消息消费成功,则结束任务调度;否则,跳转至步骤S6。
在步骤S6中:
根据延迟消息消费可靠性算法,来判断任务是否重试执行。
消息可靠性算法,通过消息持久化、发布确认、手动应答的方式来实现消息持久化。
默认所有消息、队列、交换机设置为异步持久化,以此来保证服务端消息不丢失。
通过解析任务调度规则,来定义发布确认规则、手动应答规则中的重试策略。
其中,任务消息发布失败和任务执行失败后,匹配完毕重试次数,到达指定次数后将消息持久化落盘。
以下,以某一项目为例。
在该项目中,基于30天周期内,任意时间的10000次任务:
原始方案累计计算:43200次;
本申请所提供的新方案累计计算:10720次。
可见,极大的节省计算资源。
本发明,通过采用延迟队列实现的定时任务的自动生产和消费策略,来代替传统定时任务执行;能够减少系统资源浪费、提高性能,大幅度提高任务执行时效性;同时,通过消息可靠性保证了任务执行的可靠性;任务执行异步化和执行回调策略,使任务执行更加提升了系统吞吐量和灵活度。
本发明中,使用主流消息中间件RabbitMQ的延时消息功能,完成定时任务的消费。基于topic的任务消息路由,无需关注队列、交换机等配置,系统内部自动声明队列、交换机,以及绑定消费关系,只需通过指定topic即可完成消息的发送与消费。定时消息转化,自动转化、解析定时任务配置,绑定到消息延迟属性。任务执行器自动扫描绑定,任务执行器,无需显示调用,每当订阅到任务执行消息,自动消费消息,进行逻辑执行。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
机译: 基于高斯分布的定时任务异常监测方法,电子设备和介质
机译: 一种基于数据驱动的基于意图的联网方法,该方法使用轻量级分布式SDN控制器来提供智能的消费者体验
机译: 一种用于以娱乐电影的形式自动生产基于规则的近距离实时体育赛事的装置,系统和方法