CN115344411A - 一种控制消息队列任意延时的方法及设备 - Google Patents
一种控制消息队列任意延时的方法及设备 Download PDFInfo
- Publication number
- CN115344411A CN115344411A CN202211265556.4A CN202211265556A CN115344411A CN 115344411 A CN115344411 A CN 115344411A CN 202211265556 A CN202211265556 A CN 202211265556A CN 115344411 A CN115344411 A CN 115344411A
- Authority
- CN
- China
- Prior art keywords
- delay
- parameter
- task
- message queue
- fixed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种控制消息队列任意延时的方法及设备,调用RocketMQ中间件实现,其中,信息系统的延时调度通过消息队列实现,消息队列包含多个固定延时时长参数Tn,本发明通过RocketMQ的18个固定参数的灵活组合,再通过拦截器的应用,巧妙地实现了任意时长的延时任务的执行。另外对于精确控制时长的延时任务中,网络阻塞、软硬件本身运行的耗时也影响任务执行时长的精确控制。还有低于1秒的延时任务,RocketMQ中间件没有提供可用参数。本发明均通过灵活的技术手段解决,不依赖于其它第三方工具,所有的任务执行由RocketMQ内部完成。较于现公开的最新技术,本发明在实施的系统在架构上更轻便,可用性更高,性能更好。
Description
技术领域
本发明涉及互联网数据传输处理领域,尤其涉及一种控制消息队列进行任意延时的方法及设备。
背景技术
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等,其中特别是RocketMQ由于具有高吞吐量、高可用性、适合大规模分布式系统应用的特点,已经被广泛应用至各种互联网系统平台。但各类的消息队列在延时数据的处理上,往往受到自身框架的限制,无法任意设定数据延时的时间,以RocketMQ为例,其固定延时时长包括1s、5s、10s、30s、1m、2m、3m、4m、5m、6m、7m、8m、9m、10m、20m、30m、1h、2h共18个固定的延时时长参数,这18个参数只解决了固定的延时问题,无法满足大量的更精准的延时任务需要,其应用的局限性大大增加,为了解决其不足,软件系统开发者不得不开发其他插件来解决这个问题,导致解决问题成本较高。如申请号为CN202111538304.X的发明《一种基于RocketMQ来实现超时重试执行方法》,虽然实现了自定义时长的延时任务,但是依赖中间件Redis,而使得软件系统整个效能受到影响。因此有需要通过一种不依赖第三方插件,仅通过RocketMQ自身的使用来解决问题值得进行探索研究。
发明内容
为解决上述问题,本发明提出了一种控制消息队列进行任意延时的方法及设备,其中,信息系统的延时调度通过消息队列实现,消息队列包含多个固定延时时长参数Tn,具体方法步骤如下:
步骤1:设定一个延时任务的任意时长的延时参数t;并设置一个时钟校正器,时钟校正器实时检测执行延时任务的服务器与客户端的时钟,以服务器时钟为参照物来校准客户端时钟;
步骤2:以延时参数t为参照值,在消息队列的多个固定时长参数中找出最接近且不大于延时参数t的第一固定延时时长参数T1;
步骤3:以第一固定延时时长参数T1作为延时参数来执行消息队列的延时任务,当延时任务执行结束时,计算出延时任务的剩余第一时间差为Δt1=t-T1;
调用拦截器对消息队列执行的延时过程进行拦截,在消息队列执行完第一固定延时时长参数T1时截停消息队列的执行,并判断第一时间差Δt1是否等于0,如果等于0,延时任务终止;
步骤4:如果第一时间差Δt1的结果大于0,以第一时间差Δt1做延时参数参照值,在消息队列的多个固定时长参数中找出最接近且不大于延时参数Δt1的第二固定延时时长参数T2;
步骤5:以第二固定延时时长参数T2作为延时参数来执行消息队列任务,延时任务执行结束时,计算出计划任务的剩余第二时间差Δt2=Δt1-T2; 延时任务执行完成后,再次调用拦截器对消息队列执行的延时过程进行拦截,在消息队列执行完第二固定延时时长参数T2时截停消息队列的执行,并判断第二时间差Δt2是否等于0,如果等于0,延时任务终止;
步骤6:如果第二时间差Δt2结果大于0,以第二时间差Δt2做延时参数参照值,在消息队列的多个固定时长参数中找出相邻且不大于与第二时间差Δt2的第三固定延时时长参数T3;
步骤7:并按上述规则重复第3~5步骤,直到时间差Δtn+1等于0为止。
进一步的,当所述延时参数t不在所述固定延时时长参数中时,在执行完全部所述延时任务后,建立一个以t为延时参数的固定延时时长参数,供以后调用。
进一步的,前述消息队列为RocketMQ。
进一步的,当延时任务存在两个或两个以上,而且不存在先后顺序时,如果多个执行任务中两个延时任务的延时参数之和等于消息队列的任意一个固定延时时长参数Tn时,将两个延时任务放到一起,基于消息队列的固定延时时长参数Tn执行一次。
进一步的,当延时任务的延时参数t的时长为固定延时时长参数Tn中的两个或两个以上固定延时时长参数之和时,根据相加的多个固定延时时长参数的数量建立相应数量及相应延时时长的多个延时任务。
进一步的,来自同一客户端用户的已经开始执行的延时任务存在两个或两个以上时,按延时参数t从小到大的顺序排列显示。
进一步的,待执行的延时任务数量超过单个服务器负荷时,引入两个或两个以上服务器共同承接延时任务的执行,将来自相同客户端请求的延时任务优先分配给同一个服务器执行。
进一步的,在异地设置两台或两台以上的镜像同步服务器,将预设的延时任务同时分配到镜像服务器同步执行,对各服务器的执行结果进行比对,如果全部服务器结果完全相同,则调用其中一个服务器执行结果,否则调用相同结果数量最多的服务器中任何一个执行结果。
进一步的,如果延时任务的延时参数t的小于最小固定延时时长参数时,将延时任务连续循环执行n次,使nt时长恰等于最小固定延时时长参数TL,则赋予参数TL来调用消息队列执行的延时任务,由于延时任务通过消息队列要执行n次,所述拦截器在该延时任务中只执行一次任务拦截。
本发明第二方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一项所述控制消息队列进行任意延时的方法的步骤。
本发明主要的目的在于,通过采用多次调用消息队列中固定的延时时长,解决各种延时任务的延时设定问题,同时不需要采用第三方插件,仅通过消息队列及拦截器即可完成不同延时时长的设定。
附图说明
图1为本发明设定延时方法的步骤图;
图2是本发明另一个实施例提供的终端设备的结构示意图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明所提出的一种控制消息队列进行任意延时的方法,其中,信息系统的延时调度通过消息队列实现,在本发明具体实施方式中采用RocktMQ作为消息队列中间件,其中RocketMQ包含有多个预设且不可更改的固定延时时长参数Tn。本发明具体方法步骤如下(请参考图1):
步骤1:设定一个延时任务的任意时长的延时参数t;并设置一个时钟校正器 ,时钟校正器实时检测执行延时任务的服务器与客户端的时钟,以服务器时钟为参照物来校准客户端时钟;
步骤2:以延时参数t为参照值,在消息队列的多个固定时长参数中找出最接近且不大于延时参数t的第一固定延时时长参数T1;
步骤3:以第一固定延时时长参数T1作为延时参数来执行消息队列的延时任务,当延时任务执行结束时,计算出延时任务的剩余第一时间差为Δt1=t-T1;
调用拦截器对消息队列执行的延时过程进行拦截,在消息队列执行完第一固定延时时长参数T1时截停消息队列的执行,并判断第一时间差Δt1是否等于0,如果等于0,延时任务终止;
步骤4:如果第一时间差Δt1的结果大于0,以第一时间差Δt1做延时参数参照值,在消息队列的多个固定时长参数中找出最接近且不大于延时参数Δt1的第二固定延时时长参数T2;
步骤5:以第二固定延时时长参数T2作为延时参数来执行消息队列任务,延时任务执行结束时,计算出计划任务的剩余第二时间差Δt2=Δt1-T2;延时任务执行完成后,再次调用拦截器对消息队列执行的延时过程进行拦截,在消息队列执行完第二固定延时时长参数T2时截停消息队列的执行,并判断第二时间差Δt2是否等于0,如果等于0,延时任务终止;
步骤6:如果第二时间差Δt2结果大于0,以第二时间差Δt2做延时参数参照值,在消息队列的多个固定时长参数中找出相邻且不大于与第二时间差Δt2的第三固定延时时长参数T3;
步骤7:并按上述规则重复第3~5步骤,直到时间差Δtn+1等于0为止。
此外,为了方便后续调用,当延时任务所设定的延时参数t不在固定延时时长参数中时,在执行完全部所述延时任务后,可以建立一个以t为延时参数的固定延时时长参数,后需当有新的延时任务的延时参数时,先判断延时参数是否在RocketMQ预设的固定延时时长参数中,如果没有再判断是否在新建立的固定延时时长参数。
当有两个或两个以上的延时任务,而且这些延时任务不存在先后顺序,这些延时任务的延时参数之和等于消息队列的任意一个固定延时时长参数Tn时,可以将多个延时任务放到一起,基于消息队列的固定延时时长参数Tn执行一次。
此外,当延时任务的延时参数t的时长为固定延时时长参数Tn中的两个或两个以上固定延时时长参数之和时,可以根据相加的多个固定延时时长参数的数量建立相应数量及相应延时时长的多个延时任务。
进一步的,来自同一客户端用户的已经开始执行的延时任务存在两个或两个以上时,按延时参数t从小到大的顺序排列显示。
进一步的,待执行的延时任务数量超过单个服务器负荷时,引入两个或两个以上服务器共同承接延时任务的执行,将来自相同客户端请求的延时任务优先分配给同一个服务器执行。
进一步的,在异地设置两台或两台以上的镜像同步服务器,将预设的延时任务同时分配到镜像服务器同步执行,对各服务器的执行结果进行比对,如果全部服务器结果完全相同,则调用其中一个服务器执行结果,否则调用相同结果数量最多的服务器中任何一个执行结果。
进一步的,如果延时任务的延时参数t的小于最小固定延时时长参数时,将延时任务连续循环执行n次,使nt时长恰等于最小固定延时时长参数TL,则赋予参数TL来调用消息队列执行的延时任务,由于延时任务通过消息队列要执行n次,拦截器在该延时任务只执行一次任务拦截。
由于RocketMQ的最大延时参数是2h,如果延时任务的时长大于4h,则先以2h重复循环执行RocketMQ直到剩余延时参数小于2h,再执行步骤2及其后续的拦截过程。
此外,大量的信息系统都多个任务在同时执行,当延时任务存在两个或两个以上,而且不存在先后顺序时,如果这些任务中两个延时任务的延时参数之和等于RocketMQ的任意一个参数Tn时,将这两个延时任务放到一起,通过RocketMQ的参数Tn执行一次。如果上述延时任务存在先后顺序,则按原顺序执行。
有时延时任务执行的时长是RocketMQ的是T=T1~T18之中的任何两个或两个以上的延时参数之和时,将这些参数为Tn的RocketMQ不分顺序各执行一次,就可以完成延时任务。
如果同时需要执行的延时任务数量超过单个服务器负荷时,引入两个或两个以上服务器共同承接延时任务的执行,将来自相同客户端请求的延时任务优先分配给同一个服务器执行,以提高整体延时任务的执行效率。
对于一些安全级别要求高的延时任务,为了防止在任务执行时发生意外中断或延误,在异地设置两台或两台以上的镜像同步服务器,将预设的延时任务同时分配到镜像服务器同步执行,对各服务器的执行结果进行比对,如果全部服务器结果完全相同,则调用其中一个服务器执行结果,否则调用相同结果数量最多的服务器中任何一个执行结果。
在调用RocketMQ执行各类延时任务时,如果延时任务的时长小于1秒,低于RocketMQ预设的最小固定延时时长参数,如小于1秒钟的延时任务时长为t,将该任务连续循环执行n次,使nt时长恰好为RocketMQ中最小的参数TL,即nt=T,则赋予参数TL来调用RocketMQ执行所述的延时任务,由于该延时任务通过RocketMQ要执行n次,拦截器在该延时任务中只执行一次任务拦截即达目的,通过这种方法,就能执行延时时长小于一秒钟的延时任务。
本发明不依赖于其它第三方工具,所有的延时设定由RocketMQ内部完成。较于现公开的最新技术,本发明在实施的系统在架构上更轻便,可用性更高,性能更好。以下结合具体使用场景进行说明。
实施例1
延时任务在各类信息系统中被广泛应用,可调用消息队列RocketMQ中间件来完成精准延时过程,以网上预订机票为例,当用户通过手机APP预订了一张机票,选择了特定日期班次的航班,并预选了座位。机票平台为该用户锁定了本次航班的该座位,这就意味着其他购机票的用户不能再选择本次航班的该座位机票。但该用户还没有完成支付,他有可能不支付,或主动取消该机票放弃预定。这可能会造成资源浪费,对其他购票用户不公平,也可能对航空公司造成损失。如果预订该机票的用户最终在飞机起飞前也没有支付该支票,而其他真正需要购买该机票的用户,却因该机票被锁定无法购买,最后导致该机票浪费,损害其他用户或航空公司利益。为了解决这个问题,机票平台规定,下订单预定机票后,给予15分钟支付期,如果15分钟内不支付,超过15分钟,该机票自动解锁,订单自动取消。此时机票平台系统为该机票订单执行一个15分钟的延时任务,自机票订单生成开始,锁定该机票,并持续显示提醒用户支付该订单,15分钟后解锁该机票,其他用户又可以预订该机票,原订单的提醒消息变为:订单已过期自动取消无法再进行支付。
为了完成上述的机票订单延时确认的锁定任务,在机票订单系统中需要调用RocketMQ执行一个延时任务来实现,但在RocketMQ的延时时长参数中缺乏delayTime=15min的延时参数,因此找到最接近并且不大于15分钟的固定延时时长参数T1为10Min,可以先创建delayTime=10min(T1=10)的RocketMQ的延时任务执行,当delayTime=10min的延时任务执行完后,判断剩余延时时间大于0为5分钟,因此再寻找最接近且不大于5分钟的固定延时时长参数T2为5min,此时再创建一个delayTime=5min的延时任务放到本订单的任务队列中,当delayTime=5min的延时任务完成后,再计算剩余延时时间刚好为0,因此在此延时任务结束后,订单尚未收到支付确认信息,则解锁该机票订单。
在另一种实现方式中,通过计算订单的延时任务,再比对RocketMQ的固定延时时长参数,可以将延时任务的延时参数t分为多个最接近但不超过的固定延时时长总和,例如订单的延时时长为15min,以RocktMQ的固定延时时长参数来看,可以通过多个固定延时时长参数的组合实现,例如10min+5min或5min+5min+5min或10min+3min+2min…等,但选择以最少固定延时时长相加的组合为10min+5min,并同时创建delayTime=10min(T1=10)及delayTime=5min(T2=5)的RocketMQ的延时任务放到本订单的任务队列中,在delayTime=10min的RocketMQ的延时任务执行完后立即不间断执行delayTime=5min的RocketMQ的延时任务。delayTime=10min的RocketMQ的延时任务执行完时,拦截器对RocketMQ的延时任务进行拦截,防止解锁上述机票订单,再继续不间断执行delayTime=5min的RocketMQ的延时任务,这个任务结束后,如果用户仍然没有支付,就解锁该机票订单。
实施例2
RocketMQ中间件在执行延时任务时,对时间的控制是通过调用服务器或本地客户端时钟来进行的时长最小单位是秒,但由于执行任务的服务器或客户端的问题,或者因网络的延迟、执行程序本身在时间可能都会影响执行上的精准度。为了解决这个延时误差问题,在执行任务的系统中设置时钟校正器,时钟校正器实时检测执行延时任务的服务器与客户端的时钟,同时以服务器时钟为参照物来校准客户端时钟,确保服务器和客户端的时钟不出现偏差。
举例来说,以前述的机票订单支付为例,以15分钟的作为任务的延时参数,此时用户可能在临近或刚刚好届满15分钟时点击了支付按钮完成支付,由于客户端的设备卡顿、网络阻塞等等原因,用户发出支付完成的信息未能在延时参数到前有效到达服务器,因此服务器可能仍将此笔订单视为超时取消订单。
由于存在网络延时误差,因此就需要对延时任务实际使用的时间进行校正。在本发明中,当RocketMQ任务开始执行及结束时,先通过时钟校正器校正服务器时钟及客户端时钟,以确保在订单开始时服务器端与客户端的时间一致,当用户完成支付返回支付成功信息至服务器时,在支付成功返回信息中带有客户端时钟的时间信息,当服务器端接到支付成功返回信息时,如该笔订单已经超过延时任务所设定的延时参数,则判断支付成功返回信息中的客户端时钟信息是否在延时参数时间内,如果是,则开启订单并完成支付确认,如果支付成功信息中客户端时钟信息也超过延时参数,则该笔订单仍为超时订单。
实施例3
在调用RocketMQ执行各类延时任务时,如果延时任务的时长小于一秒时,低于RocketMQ的所设定的固定延时时长参数最小范围,为了解决这个问题,设该小于1秒钟的延时任务时长为t,将该任务连续循环执行n次,使nt时长恰好为RocketMQ中最小的参数T1,即nt=T1,则赋予参数T1来调用RocketMQ执行所述的延时任务,由于该延时任务通过RocketMQ要执行n次,拦截器在该延时任务只执行一次任务拦截即达目的,通过这种方法,就能执行延时时长小于一秒钟的延时任务了。
如机票平台系统的机票搜索为了保障用户体验,从用户点击搜索按钮到搜索结果的显示,整个时间不能超过1秒,考虑到数据的网络传递可能有延迟及客户端刷新显示也要耗时,这两者都是不可控的,唯一可控的就是提高查询速率,要求查询时间不超过0.2秒,需要调用RocketMQ来完成一个延时任务,具体步骤如下:
执行一个delayTime=1S的RocketMQ的延时任务,在这1S的延时任务执行期间,设计一个循环过程,该过程中搜索引擎要完成5次时长为1秒重复搜索,在搜索启动时,拦截器同时启动,在RocketMQ刚完成第1个搜索后就拦截任务的执行,输出用户需要的结果,就可以将搜索时间控制在0.2秒。
本发明实施例还提供了一种终端设备60,参考图2所示,包括存储器62、处理器61以及存储在存储器62中并可在处理器61上运行的计算机程序63,例如自动获得建筑投影线的控制程序。处理器61执行计算机程序63时实现如上述任一项控制消息队列任意延时的方法的步骤,例如图1所示的步骤1至步骤7。
计算机程序63可以被分割成一个或多个模块,一个或者多个模块被存储在存储器62中,并由处理器61执行,以完成本发明。一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序63在终端设备60中的执行过程。
终端设备60可包括,但不仅限于,处理器61、存储器62。本领域技术人员可以理解,图2仅仅是终端设备60的示例,并不构成对终端设备60的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如终端设备60还可以包括输入输出设备、网络接入设备、总线等。
所称处理器61可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器62可以是终端设备60的内部存储单元,例如终端设备60的硬盘或内存。存储器62也可以是终端设备60的外部存储设备,例如终端设备60上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器62还可以既包括终端设备60的内部存储单元也包括外部存储设备。存储器62用于存储计算机程序63以及终端设备60所需的其他程序和数据。存储器62还可以用于暂时地存储已经输出或者将要输出的数据。
本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种控制消息队列进行任意延时的方法,其中,信息系统的延时调度通过消息队列实现,所述消息队列包含多个固定延时时长参数Tn,其特征在于,所述方法步骤如下:
步骤1:设定一个延时任务的任意时长的延时参数t;并设置一个时钟校正器 ,所述时钟校正器实时检测执行所述延时任务的服务器与客户端的时钟,以所述服务器时钟为参照物来校准所述客户端时钟;
步骤2:以所述延时参数t为参照值,在所述消息队列的所述多个固定时长参数中找出最接近且不大于所述延时参数t的第一固定延时时长参数T1;
步骤3:以所述第一固定延时时长参数T1作为延时参数来执行所述消息队列的延时任务,当延时任务执行结束时,计算出延时任务的剩余第一时间差为Δt1=t-T1;
调用拦截器对所述消息队列执行的延时过程进行拦截,在所述消息队列执行完所述第一固定延时时长参数T1时截停所述消息队列的执行,并判断所述第一时间差Δt1是否等于0,如果等于0,所述延时任务终止;
步骤4:如果所述第一时间差Δt1的结果大于0,以所述第一时间差Δt1做延时参数参照值,在所述消息队列的所述多个固定时长参数中找出最接近且不大于所述延时参数Δt1的第二固定延时时长参数T2;
步骤5:以所述第二固定延时时长参数T2作为延时参数来执行所述消息队列任务,延时任务执行结束时,计算出计划任务的剩余第二时间差Δt2=Δt1-T2;
再次调用拦截器对所述消息队列执行的延时过程进行拦截,在所述消息队列执行完所述第二固定延时时长参数T2时截停所述消息队列的执行,并判断所述第二时间差Δt2是否等于0,如果等于0,延时任务终止;
步骤6:如果所述第二时间差Δt2结果大于0,以所述第二时间差Δt2做延时参数参照值,在所述消息队列的所述多个固定时长参数中找出相邻且不大于与所述第二时间差Δt2的第三固定延时时长参数T3;
步骤7:并按上述规则重复第3~5步骤,直到时间差Δtn+1等于0为止。
2.根据权利要求1所述一种控制消息队列进行任意延时的方法,其特征在于,当所述延时参数t不在所述固定延时时长参数中时,在执行完全部所述延时任务后,建立一个以t为延时参数的固定延时时长参数,供以后调用。
3.根据权利要求1所述一种控制消息队列进行任意延时的方法,其特征在于,所述消息队列为RocketMQ。
4.根据权利要求3所述一种控制消息队列进行任意延时的方法,其特征在于,所述延时任务存在两个或两个以上时,而且不存在先后顺序时,如果多个执行任务中两个延时任务的延时参数之和等于所述消息队列的任意一个所述固定延时时长参数Tn时,将所述两个延时任务放到一起,基于所述消息队列的所述固定延时时长参数Tn执行一次。
5.根据权利要求3所述一种控制消息队列进行任意延时的方法,其特征在于,当所述延时任务的所述延时参数t的时长为所述固定延时时长参数Tn中的两个或两个以上固定延时时长参数之和时,根据相加的所述多个固定延时时长参数的数量建立相应数量及相应延时时长的多个延时任务。
6.根据权利要求3所述一种控制消息队列进行任意延时的方法,其特征在于,来自同一客户端用户的已经开始执行的延时任务存在两个或两个以上时,按所述延时参数t从小到大的顺序排列显示。
7.根据权利要求3所述一种控制消息队列进行任意延时的方法,其特征在于,待执行的延时任务数量超过单个服务器负荷时,引入两个或两个以上服务器共同承接延时任务的执行,将来自相同客户端请求的延时任务优先分配给同一个服务器执行。
8.根据权利要求6所述一种控制消息队列进行任意延时的方法,其特征在于,在异地设置两台或两台以上的镜像同步服务器,将预设的延时任务同时分配到镜像服务器同步执行,对各服务器的执行结果进行比对,如果全部服务器结果完全相同,则调用其中一个服务器执行结果,否则调用相同结果数量最多的服务器中任何一个执行结果。
9.根据权利要求3所述一种控制消息队列进行任意延时的方法,其特征在于,如果延时任务的延时参数t的小于最小所述固定延时时长参数时,将所述延时任务连续循环执行n次,使nt时长恰等于最小所述固定延时时长参数TL,则赋予参数TL来调用所述消息队列执行所述的延时任务,由于延时任务通过所述消息队列要执行n次,所述拦截器在该延时任务中只执行一次任务拦截。
10.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至9任一项所述的控制消息队列进行任意延时的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211265556.4A CN115344411B (zh) | 2022-10-17 | 2022-10-17 | 一种控制消息队列任意延时的方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211265556.4A CN115344411B (zh) | 2022-10-17 | 2022-10-17 | 一种控制消息队列任意延时的方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115344411A true CN115344411A (zh) | 2022-11-15 |
CN115344411B CN115344411B (zh) | 2023-01-03 |
Family
ID=83957249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211265556.4A Active CN115344411B (zh) | 2022-10-17 | 2022-10-17 | 一种控制消息队列任意延时的方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344411B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101799748A (zh) * | 2009-02-06 | 2010-08-11 | 中国移动通信集团公司 | 一种确定数据样本类别的方法及其系统 |
US7945813B1 (en) * | 2006-12-16 | 2011-05-17 | United Services Automobile Association (Usaa) | Automated delayed message redelivery |
US20150381549A1 (en) * | 2014-06-27 | 2015-12-31 | Amazon Technologies, Inc. | Message batching in a distributed strict queue |
CN111225041A (zh) * | 2019-12-26 | 2020-06-02 | 的卢技术有限公司 | 一种实现延时消息队列的方法及系统 |
CN112148506A (zh) * | 2020-09-25 | 2020-12-29 | 北京自如信息科技有限公司 | 消息处理方法、装置、平台和存储介质 |
CN115022263A (zh) * | 2022-06-02 | 2022-09-06 | 政采云有限公司 | 一种延时消息的投递方法、装置、设备及存储介质 |
-
2022
- 2022-10-17 CN CN202211265556.4A patent/CN115344411B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7945813B1 (en) * | 2006-12-16 | 2011-05-17 | United Services Automobile Association (Usaa) | Automated delayed message redelivery |
CN101799748A (zh) * | 2009-02-06 | 2010-08-11 | 中国移动通信集团公司 | 一种确定数据样本类别的方法及其系统 |
US20150381549A1 (en) * | 2014-06-27 | 2015-12-31 | Amazon Technologies, Inc. | Message batching in a distributed strict queue |
CN111225041A (zh) * | 2019-12-26 | 2020-06-02 | 的卢技术有限公司 | 一种实现延时消息队列的方法及系统 |
CN112148506A (zh) * | 2020-09-25 | 2020-12-29 | 北京自如信息科技有限公司 | 消息处理方法、装置、平台和存储介质 |
CN115022263A (zh) * | 2022-06-02 | 2022-09-06 | 政采云有限公司 | 一种延时消息的投递方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115344411B (zh) | 2023-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9990230B1 (en) | Scheduling a notebook execution | |
TWI584141B (zh) | 更新硬體庫以供具有fpga共處理器的電腦系統上的應用程式使用 | |
US11651312B2 (en) | Combining batch and queueable technologies in a platform for large volume parallel processing | |
US20150193225A1 (en) | Automatic application updates | |
US9697042B2 (en) | Extensibility of business process and application logic | |
CN110532025B (zh) | 基于微服务架构的数据处理方法、装置、设备及存储介质 | |
EP2645317A1 (en) | System and method for managing software licenses | |
CN106407021A (zh) | 一种基于队列的业务请求处理方法 | |
US20130024472A1 (en) | Extensibility of business process and application logic | |
US9430218B2 (en) | Apparatus and method of executing update, recording medium using the same, and server and method of providing update | |
CN110673933A (zh) | 基于ZooKeeper的分布式异步队列实现方法、装置、设备及介质 | |
CN108984290A (zh) | 任务调度方法和系统 | |
CN110113176B (zh) | 用于配置服务器的信息同步方法及装置 | |
CN111045725B (zh) | 代码管理系统的控制方法、装置及存储介质 | |
US7877750B2 (en) | Scheduled job execution management | |
CN117076096A (zh) | 任务流程的执行方法、装置、计算机可读介质及电子设备 | |
CN115344411B (zh) | 一种控制消息队列任意延时的方法及设备 | |
CN113010238A (zh) | 一种微应用调用接口的权限确定方法、装置和系统 | |
CN110362554B (zh) | 定时器的设定方法、装置、设备及计算机可读存储介质 | |
US8863133B2 (en) | License management in a cluster environment | |
US11743200B2 (en) | Techniques for improving resource utilization in a microservices architecture via priority queues | |
CN109150694A (zh) | 动态场景信息的发送方法、显示方法及服务器和移动终端 | |
CN115630706A (zh) | 量子计算机调用方法、装置和电子设备 | |
CN111857736B (zh) | 云计算产品的生成方法、装置、设备及存储介质 | |
CN116805947B (zh) | 区块链数据处理方法、装置、设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |