CN114168281A - 定时任务调度方法、装置、计算机设备和存储介质 - Google Patents
定时任务调度方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN114168281A CN114168281A CN202111414529.4A CN202111414529A CN114168281A CN 114168281 A CN114168281 A CN 114168281A CN 202111414529 A CN202111414529 A CN 202111414529A CN 114168281 A CN114168281 A CN 114168281A
- Authority
- CN
- China
- Prior art keywords
- event
- time
- queue
- task
- granularity
- 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.)
- Pending
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
- G06F9/4887—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- 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/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Telephonic Communication Services (AREA)
Abstract
本申请涉及一种定时任务调度方法、装置、计算机设备、存储介质以及计算机程序产品,其中,方法包括:获取定时任务的事件报文;根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。整个过程中,基于延时队列以及死信交换器可以实现消息的延时消费,并且采用分层时间轮策略来实现消费调度,有效避免消息拥堵,实现高效的定时任务调度。
Description
技术领域
本申请涉及大数据资源调度技术领域,特别是涉及一种定时任务调度方法、装置、计算机设备、存储介质以及计算机程序产品。
背景技术
在实际应用开发中,定时任务调度是一项不可或缺的服务。定时任务调度是一种预设任务,周期性或一次性执行定时任务。
目前,Linux内置的crontab定时任务,可以在固定的时间间隔执行指定的系统指令或者shell脚本。JDK自带的Timer定时任务执行类,使用起来简单方便。
但每一个定时任务都启动一个timer,低效且耗时。并且当一个任务执行时间过长或者执行异常时都会影响到其他任务的执行。Spring的Schedule时间表定时任务通过轮询数据库实现定时任务,由于需要一直占用线程,同时需要保持数据库连接状态,轮询数据来确定是否执行定时任务,给数据库造成较大压力,且定时任务的时间误差较大。Quartz通过Trigger来设置调度策略,SimpleTrigger在特定时间间隔执行任务一次或多次,CronTrigger基于日历的任务调度,实现更复杂的调度安排。Rabbitmq使用消息TTL(TimeTo Live)和死信队列的特性来实现延迟任务,以达到定时执行的目的。但由于队列先进先出的特性,只有位于队首的过期消息,才会路由到死信队列,这就要求了每个任务的执行时间是一致的,大大限制了使用场景。或者保证相同延迟时间的消息进入同一个队列,对不同定时要求的业务绑定不同队列,大大浪费了队列资源,造成定时任务调度效率低下。
发明内容
基于此,有必要针对上述技术问题,提供一种高效的定时任务调度方法、装置、计算机设备和存储介质。
一种定时任务调度方法,所述方法包括:
获取定时任务的事件报文;
根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
在其中一个实施例中,所述基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件包括:
监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
在其中一个实施例中,所述监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度包括:
将所有时间粒度的有效延时队列绑定至相同死信交换器;
将单个有效延时队列中事件在所述相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
在其中一个实施例中,所述将单个有效延时队列中事件在所述相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度包括:
确定时间粒度最高的有效延时队列,得到目标有效延时队列;
当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费;
当循环消费次数达到所述定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回所述当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
在其中一个实施例中,所述获取定时任务的事件报文包括:
获取定时任务;
将所述定时任务的业务数据封装成事件报文。
在其中一个实施例中,所述根据所述事件报文携带的业务数据确定分层时间轮粒度包括:
根据所述业务数据识别任务执行周期;
识别所述任务执行周期中最小时间单位和最大时间单位;
根据所述最小时间单位确定分层时间轮最低粒度、并根据所述最大时间单位确定分层时间轮最高粒度。
在其中一个实施例中,所述当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务包括:
当满足事件触发条件时,将所述事件写入任务执行队列,得到有效任务执行队列;
调用预设任务回调函数执行所述有效任务执行队列,所述预设任务回调函数与所述定时任务对应。
一种定时任务调度装置,所述装置包括:
任务获取模块,用于获取定时任务的事件报文;
队列获取模块,用于根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
注册模块,用于将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
循环消费模块,用于基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
执行模块,用于当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
在其中一个实施例中,循环消费模块还用于监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
在其中一个实施例中,循环消费模块还用于将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在所述相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
在其中一个实施例中,循环消费模块还用于确定时间粒度最高的有效延时队列,得到目标有效延时队列;当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费;当循环消费次数达到所述定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回所述当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
在其中一个实施例中,任务获取模块还用于获取定时任务;将所述定时任务的业务数据封装成事件报文。
在其中一个实施例中,队列获取模块还用于根据所述业务数据识别任务执行周期;识别所述任务执行周期中最小时间单位和最大时间单位;根据所述最小时间单位确定分层时间轮最低粒度、并根据所述最大时间单位确定分层时间轮最高粒度。
在其中一个实施例中,执行模块还用于当满足事件触发条件时,将所述事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行所述有效任务执行队列,所述预设任务回调函数与所述定时任务对应。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取定时任务的事件报文;
根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取定时任务的事件报文;
根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取定时任务的事件报文;
根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
上述定时任务调度方法、装置、计算机设备、存储介质以及计算机程序产品,获取定时任务的事件报文;根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。整个过程中,基于延时队列以及死信交换器可以实现消息的延时消费,并且采用分层时间轮策略来实现消费调度,有效避免消息拥堵,实现高效的定时任务调度。
附图说明
图1为一个实施例中定时任务调度方法的应用环境图;
图2为一个实施例中定时任务调度方法的流程示意图;
图3为又一个实施例中定时任务调度方法的流程示意图;
图4分层时间轮系统示意图;
图5为另一个实施例中定时任务调度方法的流程示意图;
图6为一个应用实例中定时任务调度方法的流程示意图;
图7为一个实施例中定时任务调度装置的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的定时任务调度方法,可以应用于如图1所示的应用环境中。其中,用户在终端侧进行操作,用户设置一个定时新的定时任务(例如定时3天6小时30分提醒浇水),终端响应用户设置操作获取定时任务的事件(Event)报文;根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;将事件报文对应的事件注册至延时队列,得到有效延时队列;基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。
在一个实施例中,如图2所示,提供了一种定时任务调度方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
S100:获取定时任务的事件报文。
定时任务是指在满足一定时间条件触发的任务,例如定时闹铃、定时提醒、定时数据切换等。定时任务的事件报文是指与定时任务对应的事件报文,在该事件报文中携带有定时任务的业务数据,业务数据中包含事件的具体内容、任务执行周期、任务的执行次数,例如连续5天间隔24小时闹铃的定时任务,其对应的业务数据中包含有事件——闹铃;执行周期——间隔24小时;执行次数——5次。
S200:根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定。
如上已述的,在业务数据中会携带有表征有任务触发时间的数据,通过分析该时间的时间粒度,确定分层时间轮粒度。常见的时间粒度包括秒、分、时、天、月以及年等,其对应的时间轮分别为秒轮、分轮、时轮、天轮、月轮以及年轮,具体如图3所示。获取与分层时间粒度对应的延时队列,并且这些延时队列与死信交换器绑定。具体来说,根据业务数据,创建不同时间粒度的延时队列,与死信交换机event绑定,并由event exchange路由到死信队列event.all。如创建天轮、时轮、分轮三个粒度的延时队列,能支持的定时任务的执行误差控制在粒度最高的分轮的单位时间内,即1分钟,理论上能支持的定时任务执行周期单位为天,数值不做限制,基于性能考虑,如果定时任务的执行周期超过一个时间轮的最大刻度,如定时任务的执行时间为2月3天4时后,则需要额外创建时间粒度为月轮的延时队列。在这里,定时任务的调度时间轮粒度可选,可从业务维度出发,选择不同时间轮粒度的延时队列,定制定时任务执行的时间误差,来获取更优的系统性能
S300:将事件报文对应的事件注册至延时队列,得到有效延时队列。
对事件报文进行解析,生成特定的触发表达式,该特定的触发表达式用于表征时间报文对应的事件,例如每3小时闹铃一次。将该特定的触发表达式注册到延时队列,得到有效延时队列。
在实际应用中,可以先获取定时任务,将定时任务对应的业务数据封装成事件报文,将事件报文解析生成特定的触发表达式,将该特定的触发表达式注册到与对应时间粒度的延时队列,得到有效延时队列。从实现底层来说,分布式的定时任务服务接收定时任务的事件(Event)报文并解析,更新recvTimestamp(记录时间戳)为当前时间,生成定时触发表达式,确定定时任务中携带业务数据对应的延时队列的粒度,注册到对应粒度的延时队列。
S400:基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件。
有效延时队列及其绑定的死信交换器采用分层时间轮策略来消费事件。具体来说,可以监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。级联调度是指分层时间轮之间的级联调度,在完成当前层的时间轮消费之后,进入下一层级的时间消费,例如3天4小时5分的定时任务,首先事件注册到天轮延时队列,事件在死信交换器处消费,当天轮以1天的时间刻度流转一次时,事件在天轮延时队列中过期一次,进入一次死信交换器,在循环累计过期3次之后,事件注册到时轮延时队列,事件在死信交换器处消费,当时轮以1小时的时间刻度流转一次时,事件在时轮延时队列中过期一次,进入一次死信交换器,在累计过期4次之后,事件注册到分轮延时队列,事件在死信交换器处消费,当分轮以1分钟的时间刻度流转一次时,事件在分轮延时队列中过期一次,进入一次死信交换器,在累计过期5次之后,此时达到事件触发条件,需要立即执行定时任务。
S500:当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。
事件触发条件是指达到定时任务对应的时间节点,例如3小时闹钟,事件触发条件即为累计已过3小时。在满足事件触发条件时,将事件写入到任务执行队列,以执行该定时任务。进一步的,如图3所示,当不满足事件触发条件时,返回S400继续采用分层时间轮策略消费事件,直至满足事件触发条件,进入S500。
上述定时任务调度方法,获取定时任务的事件报文;根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;将事件报文对应的事件注册至延时队列,得到有效延时队列;基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。整个过程中,基于延时队列以及死信交换器可以实现消息的延时消费,并且采用分层时间轮策略来实现消费调度,有效避免消息拥堵,实现高效的定时任务调度。
在其中一个实施例中,基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件包括:
监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
如上已述的,有效延时队列是对应不同时间粒度的,而不同时间粒度又是与不同层级时间轮对应的,因此可以采用分层时间轮策略对不同时间粒度(不同时间轮层级)的有效延时队列中进行级联调度。级联调度具体是指在完成当前时间粒度的有效延时队列中事件循环消费之后,调度下一时间粒度的有效延时队列中事件循环消费。例如针对3天4小时2分的定时任务,其包含有天、小时以及分的时间粒度,时间粒度对应的时间轮分别为天轮、时轮和分轮。首先从天轮延时队列开始,天轮延时队列中事件在死信交换器处循环消费3次,则将事件注册到时轮延时队列,时轮延时队列中事件在死信交换器处循环消费4次,则将事件注册到分轮延时队列,分轮延时队列中事件在死信交换器处循环消费2次,达到事件触发条件。
在其中一个实施例中,监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度包括:
将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
不同时间粒度的有效延时队列绑定到相同的死信交换器,以便进行统一的调度与管理。绑定至相同死信交换器可以理解为不同时间粒度的有效延时队列中事件在同一个死信交换器处消费。
在其中一个实施例中,将单个有效延时队列中事件在相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度包括:
确定时间粒度最高的有效延时队列,得到目标有效延时队列;当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费;当循环消费次数达到定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
所有粒度的延时队列绑定到同一个死信交换机,单个延时队列在死信交换机处进行循环消费,或者进入更细粒度延时队列。如图4所示,解析定时任务Task1的Event报文得知,定时任务于3天2小时后执行,则确定目标延时队列的粒度为天轮。注册Event到天轮的延时队列,设置此Event的TTL(使用消息)为1天。当天轮以1天的时间刻度流转一次,同时此Event在延时队列中过期一次,进而进入到死信队列。由recvTimestamp和系统时间确定Event在该延时队列中的重排次数,该Event在此延时队列循环过期三次后,定时任务分发机制把此Event发送到时轮延时队列,重复上述过程直至时间轮流转到Task1的执行刻度。
如图5所示,在其中一个实施例中,S100包括:
S120:获取定时任务;
S140:将定时任务的业务数据封装成事件报文。
终端响应用户操作创建一个定时任务,并且将定时任务中的业务数据封装为事件报文,以便进入下一步的数据处理。进一步的,在创建定时任务时,需要执行定时任务执行周期和执行次数。在实际应用中,终端响应用户操作,在业务流程中指定的节点,动态创建定时任务,确定任务执行的周期和次数,同时绑定任务回调函数。
如图5所示,在其中一个实施例中,S200包括:
S220:根据业务数据识别任务执行周期;
S240:识别任务执行周期中最小时间单位和最大时间单位;
S260:根据最小时间单位确定分层时间轮最低粒度、并根据最大时间单位确定分层时间轮最高粒度;
S280:获取与分层时间轮粒度对应的延时队列。
如上已述的,在业务数据中可以包含有任务执行周期数据,即任务需要多久执行一次,识别执行周期里面最小时间单位和最大时间单位,例如3天2小时4分,则其最小时间单位为分,最大时间单位为天;又如3月4天5小时6分,则其最小时间单位为秒,最大时间单位为月。对应的,按照最小时间单位确定分层时间轮最低粒度,按照最大时间单位确定分层时间轮最高粒度,如上述的3天2小时4分定时任务,其分层时间轮包含天轮、时轮和分轮;而3月4天5小时6分定时任务,其分层时间轮包含月轮、天轮、时轮、分轮以及秒轮。
在其中一个实施例中,当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务包括:
当满足事件触发条件时,将事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行有效任务执行队列,预设任务回调函数与定时任务对应。
任务回调函数是与定时任务对应的,在获取/创建定时任务时会有对应的任务回调函数,当定时任务事件达到触发条件,会进入到任务执行队列。通过监听此任务执行队列中到达的Event,区分Event业务类型,触发定时任务对应的任务回调函数,完成定时任务的一次执行。
进一步的,在完成一次定时任务之后,还可以判断任务执行队列中事件是否需要周期性执行,如果不是一次性任务,则会重置recvTimestamp为当前时间返回将事件报文对应的事件注册至延时队列的步骤。
为进一步详细说明本申请定时任务调度方法的技术方案及其效果,下面将采用具体应用实例,集合图6展开说明。如图6所示,本申请定时任务调度方法包括以下步骤:
1、创建定时任务,指定任务执行周期和执行次数,把定时任务的业务数据封装成Event报文;
2、设置分层时间轮延时队列;
3、解析Event报文,指定时间粒度,注册Event到对应粒度的延时队列;
4、延时队列与其绑定死信交换器根据分层时间轮策略消费Event;
5、Event触发条件是否满足,若不满足,则返回步骤4;若满足,则进入步骤6;
6、Event进入定时任务执行队列,监听定时任务执行,区分Event类型,执行任务;
7、判断Event是否需要循环执行,若是,则更新Event重置recvTimestamp,返回步骤3;若否,则结束。
整体来说,本申请定时任务调度方法,基于死信交换器特性实现定时任务的基础下,对定时任务创建的业务节点,延时队列的循环策略,定时任务自定义消费方式等方面进行了进一步的优化,采用了分层时间轮的延时队列进行自体循环消费和级联协作消费,做到既不浪费空间又不浪费时间,同时实现了定时任务的时间粒度可控可调,此外,定时任务执行记录可通过监听定时执行任务队列由用户定制化消费。
应该理解的是,虽然上述各流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述各流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种定时任务调度装置,包括:
任务获取模块100,用于获取定时任务的事件报文;
队列获取模块200,用于根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;
注册模块300,用于将事件报文对应的事件注册至延时队列,得到有效延时队列;
循环消费模块400,用于基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;
执行模块500,用于当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。
上述定时任务调度装置,获取定时任务的事件报文;根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;将事件报文对应的事件注册至延时队列,得到有效延时队列;基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。整个过程中,基于延时队列以及死信交换器可以实现消息的延时消费,并且采用分层时间轮策略来实现消费调度,有效避免消息拥堵,实现高效的定时任务调度。
在其中一个实施例中,循环消费模块400还用于监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
在其中一个实施例中,循环消费模块400还用于将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
在其中一个实施例中,循环消费模块400还用于确定时间粒度最高的有效延时队列,得到目标有效延时队列;当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费;当循环消费次数达到定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
在其中一个实施例中,任务获取模块100还用于获取定时任务;将定时任务的业务数据封装成事件报文。
在其中一个实施例中,队列获取模块200还用于根据业务数据识别任务执行周期;识别任务执行周期中最小时间单位和最大时间单位;根据最小时间单位确定分层时间轮最低粒度、并根据最大时间单位确定分层时间轮最高粒度。
在其中一个实施例中,执行模块500还用于当满足事件触发条件时,将事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行有效任务执行队列,预设任务回调函数与定时任务对应。
关于定时任务调度装置的具体实施例可以参见上文中对于定时任务调度方法的实施例,在此不再赘述。上述定时任务调度装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种定时任务调度方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取定时任务的事件报文;
根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;
将事件报文对应的事件注册至延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;
当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
确定时间粒度最高的有效延时队列,得到目标有效延时队列;当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费;当循环消费次数达到定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取定时任务;将定时任务的业务数据封装成事件报文。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
根据业务数据识别任务执行周期;识别任务执行周期中最小时间单位和最大时间单位;根据最小时间单位确定分层时间轮最低粒度、并根据最大时间单位确定分层时间轮最高粒度。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
当满足事件触发条件时,将事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行有效任务执行队列,预设任务回调函数与定时任务对应。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取定时任务的事件报文;
根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;
将事件报文对应的事件注册至延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;
当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
确定时间粒度最高的有效延时队列,得到目标有效延时队列;当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费;当循环消费次数达到定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取定时任务;将定时任务的业务数据封装成事件报文。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
根据业务数据识别任务执行周期;识别任务执行周期中最小时间单位和最大时间单位;根据最小时间单位确定分层时间轮最低粒度、并根据最大时间单位确定分层时间轮最高粒度。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
当满足事件触发条件时,将事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行有效任务执行队列,预设任务回调函数与定时任务对应。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取定时任务的事件报文;
根据事件报文携带的业务数据确定分层时间轮粒度,获取与分层时间轮粒度对应的延时队列,延时队列与死信交换器绑定;
将事件报文对应的事件注册至延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费事件;
当满足事件触发条件时,将事件写入任务执行队列、以执行定时任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
确定时间粒度最高的有效延时队列,得到目标有效延时队列;当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费;当循环消费次数达到定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回当目标有效延时队列以对应时间粒度流转一次时,事件进入一次相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取定时任务;将定时任务的业务数据封装成事件报文。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
根据业务数据识别任务执行周期;识别任务执行周期中最小时间单位和最大时间单位;根据最小时间单位确定分层时间轮最低粒度、并根据最大时间单位确定分层时间轮最高粒度。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
当满足事件触发条件时,将事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行有效任务执行队列,预设任务回调函数与定时任务对应。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (17)
1.一种定时任务调度方法,其特征在于,所述方法包括:
获取定时任务的事件报文;
根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
2.根据权利要求1所述的方法,其特征在于,所述基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件包括:
监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
3.根据权利要求2所述的方法,其特征在于,所述监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度包括:
将所有时间粒度的有效延时队列绑定至相同死信交换器;
将单个有效延时队列中事件在所述相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
4.根据权利要求3所述的方法,其特征在于,所述将单个有效延时队列中事件在所述相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度包括:
确定时间粒度最高的有效延时队列,得到目标有效延时队列;
当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费;
当循环消费次数达到所述定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回所述当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
5.根据权利要求1所述的方法,其特征在于,所述获取定时任务的事件报文包括:
获取定时任务;
将所述定时任务的业务数据封装成事件报文。
6.根据权利要求1所述的方法,其特征在于,所述根据所述事件报文携带的业务数据确定分层时间轮粒度包括:
根据所述业务数据识别任务执行周期;
识别所述任务执行周期中最小时间单位和最大时间单位;
根据所述最小时间单位确定分层时间轮最低粒度、并根据所述最大时间单位确定分层时间轮最高粒度。
7.根据权利要求1所述的方法,其特征在于,所述当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务包括:
当满足事件触发条件时,将所述事件写入任务执行队列,得到有效任务执行队列;
调用预设任务回调函数执行所述有效任务执行队列,所述预设任务回调函数与所述定时任务对应。
8.一种定时任务调度装置,其特征在于,所述装置包括:
任务获取模块,用于获取定时任务的事件报文;
队列获取模块,用于根据所述事件报文携带的业务数据确定分层时间轮粒度,获取与所述分层时间轮粒度对应的延时队列,所述延时队列与死信交换器绑定;
注册模块,用于将所述事件报文对应的事件注册至所述延时队列,得到有效延时队列;
循环消费模块,用于基于有效延时队列以及绑定的死信交换器,采用分层时间轮策略消费所述事件;
执行模块,用于当满足事件触发条件时,将所述事件写入任务执行队列、以执行所述定时任务。
9.根据权利要求8所述的装置,其特征在于,所述循环消费模块还用于监听所有时间粒度的有效延时队列中事件在死信交换器处循环消费情况,并采用分层时间轮策略对循环消费进行级联调度。
10.根据权利要求9所述的装置,其特征在于,所述循环消费模块还用于将所有时间粒度的有效延时队列绑定至相同死信交换器;将单个有效延时队列中事件在所述相同死信交换器处进行循环消费,采用分层时间轮策略对循环消费进行级联调度。
11.根据权利要求10所述的装置,其特征在于,所述循环消费模块还用于确定时间粒度最高的有效延时队列,得到目标有效延时队列;当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费;当循环消费次数达到所述定时任务对应的当前时间粒度的数值时,选取下一时间粒度的有效延时队列作为目标有效延时队列,返回所述当所述目标有效延时队列以对应时间粒度流转一次时,所述事件进入一次所述相同死信交换器消费的步骤,直至循环完所有时间粒度的有效延时队列。
12.根据权利要求8所述的装置,其特征在于,所述任务获取模块还用于获取定时任务;将所述定时任务的业务数据封装成事件报文。
13.根据权利要求8所述的装置,其特征在于,所述队列获取模块还用于根据所述业务数据识别任务执行周期;识别所述任务执行周期中最小时间单位和最大时间单位;根据所述最小时间单位确定分层时间轮最低粒度、并根据所述最大时间单位确定分层时间轮最高粒度。
14.根据权利要求8所述的装置,其特征在于,所述执行模块还用于当满足事件触发条件时,将所述事件写入任务执行队列,得到有效任务执行队列;调用预设任务回调函数执行所述有效任务执行队列,所述预设任务回调函数与所述定时任务对应。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
17.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111414529.4A CN114168281A (zh) | 2021-11-25 | 2021-11-25 | 定时任务调度方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111414529.4A CN114168281A (zh) | 2021-11-25 | 2021-11-25 | 定时任务调度方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114168281A true CN114168281A (zh) | 2022-03-11 |
Family
ID=80480618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111414529.4A Pending CN114168281A (zh) | 2021-11-25 | 2021-11-25 | 定时任务调度方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114168281A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116155970A (zh) * | 2023-02-08 | 2023-05-23 | 江苏苏宁银行股份有限公司 | 一种基于tcp长连接的分布式延迟调度方法和装置 |
CN116302455A (zh) * | 2023-05-23 | 2023-06-23 | 深圳前海环融联易信息科技服务有限公司 | 定时任务的处理方法及装置、存储介质、计算机设备 |
CN117081853A (zh) * | 2023-10-12 | 2023-11-17 | 南方电网数字电网研究院有限公司 | 具备时间轮动态认证的新能源边缘侧通信规约转换模块 |
-
2021
- 2021-11-25 CN CN202111414529.4A patent/CN114168281A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116155970A (zh) * | 2023-02-08 | 2023-05-23 | 江苏苏宁银行股份有限公司 | 一种基于tcp长连接的分布式延迟调度方法和装置 |
CN116302455A (zh) * | 2023-05-23 | 2023-06-23 | 深圳前海环融联易信息科技服务有限公司 | 定时任务的处理方法及装置、存储介质、计算机设备 |
CN116302455B (zh) * | 2023-05-23 | 2023-09-01 | 深圳前海环融联易信息科技服务有限公司 | 定时任务的处理方法及装置、存储介质、计算机设备 |
CN117081853A (zh) * | 2023-10-12 | 2023-11-17 | 南方电网数字电网研究院有限公司 | 具备时间轮动态认证的新能源边缘侧通信规约转换模块 |
CN117081853B (zh) * | 2023-10-12 | 2024-02-13 | 南方电网数字电网研究院股份有限公司 | 具备时间轮动态认证的新能源边缘侧通信规约转换模块 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114168281A (zh) | 定时任务调度方法、装置、计算机设备和存储介质 | |
KR102037845B1 (ko) | 컴퓨트 용량을 위한 주기적인 요청들의 관리 | |
CN111367679B (zh) | 人工智能算力资源复用方法及装置 | |
Bertogna et al. | Limited preemption EDF scheduling of sporadic task systems | |
US20190370080A1 (en) | Streaming traffic pattern for public cloud auto scaling | |
CN107241380B (zh) | 用于基于时间调整的负载均衡的方法和设备 | |
US20060206887A1 (en) | Adaptive partitioning for operating system | |
KR102239428B1 (ko) | 이종 이벤트 큐 | |
US8312466B2 (en) | Restricting resources consumed by ghost agents | |
CN114416308A (zh) | 任务调度方法、装置、计算机设备和存储介质 | |
Imai et al. | Accurate resource prediction for hybrid IaaS clouds using workload-tailored elastic compute units | |
CN112148504A (zh) | 目标消息的处理方法及装置、存储介质及电子装置 | |
CN114661433A (zh) | 事件任务的调度方法及装置、存储介质、电子设备 | |
CN114924858A (zh) | 任务调度方法及装置、存储介质及电子设备 | |
Buttazzo et al. | Efficient EDF implementation for small embedded systems | |
Mutlag et al. | A new fog computing resource management (FRM) model based on hybrid load balancing and scheduling for critical healthcare applications | |
CN112650566B (zh) | 定时任务处理方法、装置、计算机设备和存储介质 | |
Marau et al. | Performing flexible control on low-cost microcontrollers using a minimal real-time kernel | |
Staschulat et al. | Budget-based real-time executor for micro-ros | |
CN111736961B (zh) | 虚拟机的释放方法及装置、存储介质及电子设备 | |
CN105474173B (zh) | 用于减少功率消耗的并行的网络应用调度 | |
Trumpler et al. | A systematic framework for evolving TinyOS | |
CN113590289B (zh) | 作业调度方法、系统、装置、计算机设备和存储介质 | |
US9507654B2 (en) | Data processing system having messaging | |
CN115794321A (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 |