本发明涉及任务调度领域,尤其涉及任务调度方法、装置、计算机设备及存储介质。
背景技术:
现有技术中,基于任务驱动型的请求,需要请求方多次请求和判断,先通过get请求查询数据,如果存在就返回数据,如果不存在就返回无数据,请求方根据响应判断,如果返回无数据,则再次发出post请求,请求新增数据对象。后续请求方需多次轮询查询数据,或公开回调接口用于服务方回调。
上述基于任务驱动型的请求的缺点在于,需要请求方多次请求和判断,整个步骤交互繁琐,而后续请求方的多次轮询或公开回调接口,都会带来更高的网络资源消耗和接口安全问题。
技术实现要素:
本发明实施例提供了任务调度方法、装置、计算机设备及存储介质,旨在解决现有数据请求方法网络资源消耗高、接口不安全等问题。
本发明实施例提供一种基于http的任务调度方法,其包括:
预设任务元数据集合,所述任务元数据集合中包含以关键字区分的各类任务元数据,每类任务元数据包含请求接口、请求链接和任务表;
获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字;
基于所述关键字在所述任务元数据集合中匹配出对应的任务元数据;
基于所述任务元数据在网络上查询是否有与所述http请求对应的数据;
若查询到数据则返回数据;
若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理;
间隔查询所述任务表中的待处理任务,并执行相应的待处理任务。
优选的,所述任务元数据还包括消息队列,所述若查询到数据则返回数据包括:
根据所述关键字在所述任务元数据中查询对应的消息队列;
基于所述消息队列,调用消息队列服务返回数据。
优选的,所述若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理,包括:
返回用于表明任务已经进入任务表的响应信息。
优选的,所述间隔查询所述任务表中的待处理任务,并执行相应的待处理任务,包括:
调用任务调度线程轮询所述任务表;
若查询不到待处理任务,则休眠指定时间,休眠结束后再次轮询任务表;
若查询到待处理任务,则执行相应的待处理任务。
优选的,所述若查询到待处理任务,则执行相应的待处理任务之后,包括:
执行完待处理任务后,存储执行得到的数据,并更新任务的状态为已完成。
优选的,所述存储执行得到的数据,包括:
将执行得到的数据保存至任务表中。
优选的,所述获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字,包括:
提取请求方发送的http请求;
获取所述http请求中的请求路径;
将所述请求路径进行拆分,并将拆分后的结果与关键字进行匹配;
获取拆分后的结果中命中的关键字。
本发明实施例还提供一种基于http的任务调度装置,其包括:
预设单元,用于预设任务元数据集合,所述任务元数据集合中包含以关键字区分的各类任务元数据,每类任务元数据包含请求接口、请求链接和任务表;
提取单元,用于获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字;
匹配单元,用于基于所述关键字在所述任务元数据集合中匹配出对应的任务元数据;
查询单元,用于基于所述任务元数据在网络上查询是否有与所述http请求对应的数据;
返回单元,用于若查询到数据则返回数据;
保存单元,用于若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理;
执行单元,用于间隔查询所述任务表中的待处理任务,并执行相应的待处理任务。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的基于http的任务调度方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行如上所述的基于http的任务调度方法。
本发明实施例提供了任务调度方法、装置、计算机设备及存储介质,该方法包括:预设任务元数据集合,所述任务元数据集合中包含以关键字区分的各类任务元数据,每类任务元数据包含请求接口、请求链接和任务表;获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字;基于所述关键字在所述任务元数据集合中匹配出对应的任务元数据;基于所述任务元数据在网络上查询是否有与所述http请求对应的数据;若查询到数据则返回数据;若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理;间隔查询所述任务表中的待处理任务,并执行相应的待处理任务。该方法具备轻量、低耦合、低交互、低负载等优点。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于http的任务调度方法的流程示意图;
图2为本发明实施例提供的基于http的任务调度装置的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1,图1为本发明实施例提供的一种基于http的任务调度方法的流程示意图,其包括步骤s101~s107:
s101、预设任务元数据集合,所述任务元数据集合中包含以关键字区分的各类任务元数据,每类任务元数据包含请求接口、请求链接和任务表;
本步骤中先预设好任务元数据集合,其中的任务元数据集合是由若干任务元数据构成,其中的任务元数据分为不同类型,每一类型的任务元数据是以关键字进行区分。
具体地,每类任务元数据包含的信息有请求接口、请求链接和任务表。这些信息具有不同的功能。如所述请求接口是指请求所使用的接口,请求链接则是指请求所使用的链接,任务表则用于记录待处理任务,以便后续执行相应的待处理任务。
一个任务元数据集合的示例如下:
在上述示例中,business1和business2是关键字,所以上述示例中具有两个任务元数据。其中在business1的任务元数据中,其请求接口是接口1,其请求链接是/query/business1,其任务表是business1_task_db。其中在business2的任务元数据中,其请求接口是接口2,其请求链接是/query/business2,其任务表是business2_task_db。
s102、获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字;
当请求方需要查询数据时,其会发送http请求查询数据,所以本步骤可获取请求方发送的用于查询数据的http请求。然后提取出所述http请求中的关键字。
例如请求方发送的http请求为"/query/business1",那么可以提取其中的关键字business1。以便在后续步骤中根据不同的任务元数据进行处理。
s103、基于所述关键字在所述任务元数据集合中匹配出对应的任务元数据;
在通过步骤s102提取出关键字后,可基于提取出的关键字在任务元数据集合中查找到匹配的任务元数据,例如提取出的关键字为business1,那么可查找到与business1匹配的任务元数据如下:
"business1":{
"desc":"接口1",
"http_url":"/query/business1",
"task_db":"business1_task_db",
"resp_mq":"spider.business1.resp_mq"
s104、基于所述任务元数据在网络上查询是否有与所述http请求对应的数据;
在通过步骤s103匹配出与关键字对应的任务元数据后,可以通过该任务元数据在网络上查询数据,即查询与所述http请求对应的数据。
具体地,可以通过该任务元数据中的请求接口、请求链接来请求数据。另外,该任务元数据中的任务表还可以预先记录用于待查询数据的数据字段,这样可以根据任务表来查询数据字段对应的数据(字段值)。也就是说,上述请求接口、请求链接等构成了数据查询的查询条件。
s105、若查询到数据则返回数据;
如果查询到数据就返回数据,请求结束,即本次流程结束。
s106、若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理;
如果查询不到数据,则需要将本次http请求的任务保存到对应的任务表中,例如提取出的关键字若为business1,则将本次http请求的任务保存到任务表business1_task_db中。
然后将该任务表中对应任务的状态设置为待处理,例如当将本次http请求的任务保存到任务表business1_task_db中后,可将本次http请求的任务设置为待处理,这样该任务即为待处理任务,可方便后续进行轮询。
s107、间隔查询所述任务表中的待处理任务,并执行相应的待处理任务。
本步骤中,是间隔查询任务表中的待处理任务,若查询到任务表中具有待处理任务,则执行相应的待处理任务,这样可以持续不断的处理还未处理的任务,以便及时响应请求方的请求。
在本实施例中,通过封装底层任务调度逻辑来支持任务驱动型请求,并通过请求接口,实现一个接口支持数据查询和新增操作,具备轻量、低耦合、低交互、低负载等优点。
在一实施例中,所述任务元数据还包括消息队列,所述若查询到数据则返回数据包括:
根据所述关键字在所述任务元数据中查询对应的消息队列;
基于所述消息队列,调用消息队列服务返回数据。
以前述示例的任务元数据集合为例,任务元数据可能所包含的消息队列为spider.business1.resp_mq或spider.business2.resp_mq。
在查询到数据后,可以先根据关键字在对应的任务元数据中查询对应的消息队列,例如查询到的消息队列为spider.business1.resp_mq。然后基于该消息队列,调用消息队列服务来返回数据,即以消息的形式返回数据。即本实施例中,当任务执行完毕,再通过消息队列分发数据,解决异步回调问题。
本发明实施例中,所述消息队列优选采用rabbitmq队列。rabbitmq队列abbitmq是以生产者、消费者为模型而存在的一个消息队列。其具有解耦和异步的功能。其中,解耦实现了应用程序不再通过接口,而只需要调用消息队列的接口把结果存放在消息队列即可。异步是指通过消息队列即可实现异步操作,而不必等待结果返回。
在使用rabbitmq队列的过程中,需要确保消息的可靠性传输,具体可以从三个方面考虑:生产者丢失消息、消息队列丢失消息、消费者丢失消息。
本发明实施例中采用了rabbitmq队列提供的transaction机制或confirm机制来确保生产者不会丢失消息。transaction机制是指发送消息前,开启事物(channel.txselect()),然后发送消息,如果发送过程中出现异常,事物会回滚(channel.txrollback()),如果发送成功则提交事物(channel.txcommit())。
当然采用上述transaction机制会导致吞吐量稍有下降。所以也可采用confirm机制。在confirm机制下,所有在进入confirm机制的信道上发布的消息都将会被指派一个唯一的id,一旦消息被投递到所有匹配的队列之后,就会发送一个ack(确认字符)消息给生产者,这就使得生产者确认消息已经正确到达目的队列。如果rabbitmq队列没能处理该消息,则会发送一个nack(否定确认)消息,这样就可以进行重试操作。
为了应对消息队列丢失消息的情况,本发明实施例可以开启持久化磁盘的配置。此持久化配置可以和confirm机制配合使用,即在消息持久化磁盘后,再向生产者发送一个ack消息。这样,如果消息持久化磁盘之前,rabbitmq队列异常,那么生产者就会收不到ack消息,生产者会自动重发。开启持久化磁盘的配置可以按如下方式实现:1、将rabbitmq队列的持久化标识durable设置为true,则代表是一个持久的队列,2、发送消息时将deliverymode=2,这样设置以后,即使rabbitmq异常,重启后也能恢复数据。
为了防止消费者丢失消息,本实施例可以采用自动确认消息模式。在这种模式下,消费者会自动确认收到信息。消费者确认收到消息后,rabbitmq队列会立即将消息删除,这种情况下如果消费者出现异常而没能处理该消息,rabbitmq队列可不删除相应的消息。
在一实施例中,所述若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理,包括:
返回用于表明任务已经进入任务表的响应信息。
本实施例中,如果查询不到数据会自动将任务保存到任务表中,此时可返回响应消息至请求方,表明该任务已经进入任务表,后续会轮询该任务表。这样请求方就可以确认http请求已成功接收,并且对应的任务已经进入任务表进行处理。
在一实施例中,所述间隔查询所述任务表中的待处理任务,并执行相应的待处理任务,包括:
调用任务调度线程轮询所述任务表;
若查询不到待处理任务,则休眠指定时间,休眠结束后再次轮询任务表;
若查询到待处理任务,则执行相应的待处理任务。
本实施例是通过常驻的任务调度线程来轮询任务表,如果查询不到待处理任务,则说明此时任务表中没有待处理任务,但任务表会不断更新,所以此时可休眠指定时间,在休眠结束后再次轮询任务表,以保证后续任务表中有待处理任务时可及时进行处理。
而如果查询到待处理任务,则执行该待处理任务,对于待处理任务的执行,同样是按照前述方法执行,即基于所述任务元数据在网络上查询是否有与所述http请求对应的数据,具体地,可以通过该任务元数据中的请求接口、请求链接来请求数据。另外,可以根据任务表来查询数据字段对应的数据(字段值)。也就是说,上述请求接口、请求链接等构成了数据查询的查询条件。
本实施例中,调用任务调度线程轮询所述任务表是等间隔轮询,即所述每隔指定时间轮询一次任务表。也就是说,当在任务表中查询不到待处理任务时,会休眠指定时间,休眠结束后再轮询一次任务表。当在任务表中查询到待处理任务时,即执行待处理任务,此时任务可能已执行完,也可能还未执行完,但不影响任务调度线程同样会休眠指定时间,休眠结束后再轮询一次任务表。这样做的好处是不论任务表内的待处理任务是否执行完,都可以每隔指定时间轮询一次,以便后续有任务表有更新时,都能及时发现其中的待处理任务。
另外,当有查询到待处理任务并对所述待处理任务进行执行时,可以将所述待处理任务的状态更新为处理中,这样当后面再次轮询时,发现该待处理任务未执行完,则无需对该处理中的任务进行额外操作,只需待其处理完即可。在一具体应用场景中,可以设置一时间阈值,判断所述任务执行的时间是否超过所述时间阈值,若是则说明在所述时间阈值内任务仍未执行完毕,表明处理失败,那么会放弃本次处理,并将任务的状态回滚至待处理,以便在后面的轮询过程中,再次对该待处理任务进行处理。所述的时间阈值可以设置为大于所述指定时间,当然,也可以设置为小于或等于所述指定时间。
进一步,当待处理任务在执行时,还可记录执行次数,并在处理失败后重新处理时,更新所述执行次数并进行累加,这样就能得到每个待处理任务的执行次数。当执行次数超过预设的次数阈值时,则将所述待处理任务从所述任务表中剔除。这是因为一个任务反复的执行仍未处理成功,表明该任务可能无法成功执行,无需再浪费资源去处理这样的任务。例如在一个具体的例子中,所述次数阈值可以是5次。
当在一个任务表中剔除一个处理失败的任务时,需向请求方返回通知消息,以便请求方及时了解任务目前的状态。方便请求方对任务进行调整。在所述通知消息中可添加该任务的执行次数,第一次执行的时间以及最后一次执行的时间。这样请求方也能获知任务从进入到任务表到从任务表中剔除的整个生命状态。
而当待处理任务执行完毕后,可将该待处理任务从任务表中删除,避免后续重复执行该待处理任务,或者将该待处理任务的状态更新为已完成,这样当轮询任务表时,若任务状态为已完成,则无需对该任务进行任何处理。
在一实施例中,可以按照顺序轮询所述任务表,从而按照顺序执行任务表中的待处理任务。本实施例中可以按照待处理任务添加至任务表的时间来轮询所述任务表,先处理添加时间早的待处理任务,后处理添加时间晚的待处理任务,使先进入任务表中的待处理任务得到优先执行,后进入任务表中的待处理任务后执行。
在一实施例中,所述若查询到待处理任务,则执行相应的待处理任务之后,包括:
执行完待处理任务后,存储执行得到的数据,并更新任务的状态为已完成。
在本实施例中,执行完待处理任务后,说明查询到数据,此时可以存储执行得到的数据,然后将任务的状态更新为已完成,后续在轮询任务表时便不会继续执行相同的任务。
此外,存储数据后也方便通过消息队列进行分发。
在一实施例中,所述存储执行得到的数据,包括:将执行得到的数据保存至任务表中。
本实施例中,可以直接将存储执行得到的数据保存在任务表中,方便返回。当然也可以将执行得到的数据存储在其他缓存位置。
在一实施例中,所述获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字,包括:
提取请求方发送的http请求;
获取所述http请求中的请求路径;
将所述请求路径进行拆分,并将拆分后的结果与关键字进行匹配;
获取拆分后的结果中命中的关键字。
本实施例中,请求方发送http请求后,可以提取请求方发送的http请求中的请求路径,如前所述的/query/business1,然后对请求路径进行拆分,例如以“/”为界进行拆分,如上述请求路径拆分后即可得到query和business1,然后将拆分后的结果与任务元数据集合中的关键字进行匹配,例如将query和business1与前述任务元数据集合中的关键字business1和business2分别进行匹配,发现命中的关键字为business1,所以最终提取出的关键字确定为business1。
请参阅图2,图2为本发明实施例提供的一种基于http的任务调度装置的示意性框图,该任务调度装置200包括:
预设单元201,用于预设任务元数据集合,所述任务元数据集合中包含以关键字区分的各类任务元数据,每类任务元数据包含请求接口、请求链接和任务表;
提取单元202,用于获取请求方发送的用于查询数据的http请求,并提取所述http请求中的关键字;
匹配单元203,用于基于所述关键字在所述任务元数据集合中匹配出对应的任务元数据;
查询单元204,用于基于所述任务元数据在网络上查询是否有与所述http请求对应的数据;
返回单元205,用于若查询到数据则返回数据;
保存单元206,用于若查询不到数据,则将所述http请求的任务保存到对应的任务表,并将所述任务表中对应任务的状态设置为待处理;
执行单元207,用于间隔查询所述任务表中的待处理任务,并执行相应的待处理任务。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的基于http的任务调度方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行如上所述的基于http的任务调度方法。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的单元集合成一个单元,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。