一种异步队列任务的报错处理方法及系统与流程

未命名 08-03 阅读:147 评论:0


1.本发明涉及信息数据化处理技术领域,具体涉及一种异步队列任务的报错处理方法及系统。


背景技术:

2.异步消息队列是指将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列,并交由子线程异步处理,在处理完成后,主线程就能够调用异步处理返回结果。
3.在医疗信息处理领域通常需要用到异步消息队列,如医学关系抽取任务,需要在大量的诊断文本中进行关系抽取,提取出其中的疾病、症状、发病部位、发病时长等等信息,利用异步消息队列来处理能有效减少消息处理的时间。
4.然而,由于异步消息队列的特性,在异步处理过程中,处理开始到处理结束是一个封闭的状态,且无法中途停止,因此在消息处理过程中程序出现异常后,难以检测到发生异常的位置且必须等待所有消息消费完毕才能结束,这样就造成了时间上的浪费。


技术实现要素:

5.本发明提供的一种异步队列任务的报错处理方法及系统,开辟了一个独立的数据库,在一个异步任务报错后,将该任务id+时间戳拼接后存入到该数据库,当执行下一个消息时候,与库里边存放的唯一标识作比较,如果相同则可跳过该消息,从而能够在不结束任务的情况下跳过异常任务,达到减少任务时间的效果,从而能够解决上述过程中的技术问题。
6.本发明解决上述技术问题的技术方案如下:第一方面,本发明提供了异步队列任务的报错处理方法,包括以下步骤:s1:将诊断文本进行分组预处理,并存入消息队列中;s2:从消息队列中逐组取出消息,并通过api接口压入第一数据库中;s3:异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;s4:继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务;s5:重复s3-s4步骤,直到消息处理完毕。
7.在一些实施例中,所述s1包括:s11:通过java将诊断文本平均分为多个消息体;s12:将任务id和时间戳作为消息体的唯一标识,并将消息体压入消息队列中。
8.在一些实施例中,所述s2:s21:通过python,从消息队列中逐条取出消息体,并获取消息体的任务id以及时间戳;
s22:调用api接口,将携带任务id以及时间戳的消息体压入到第一数据库。
9.在一些实施例中,所述s3中“若执行失败,则向第二数据库写入识别键值”包括:s31:抽取任务结束后返回一个状态码,并根据状态码判断任务是否执行成功;s32:若任务执行失败,则在第二数据库中写入键为任务id和时间戳,值为“error”的数据。
10.在一些实施例中,所述s4包括:s41:继续获取队列消息,将当前消息的任务id和时间戳进行拼接作为键,并对键值进行判断;s42:若键值为“error”,则跳过抽取任务,并在返回一个空值后重新将消息送入消息队列;若键值不为“error”,执行抽取任务。
11.第二方面,本发明提供了异步队列任务的报错处理系统,包括:消息预处理模块,用于将诊断文本进行分组预处理,并存入消息队列中;数据传输模块,用于从消息队列中取出一组消息,并通过api接口压入第一数据库中;异步处理模块,用于异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;判断处理模块,用于继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务;循环任务模块,用于重复异步处理模块以及键值判断模块的步骤,直到消息处理完毕。
12.在一些实施例中,所述消息预处理模块包括:消息分组子模块,用于通过java将诊断文本平均分为多个消息体;标识获取子模块,用于将任务id和时间戳作为消息体的唯一标识,并将消息体压入消息队列中。
13.在一些实施例中,所述数据传输模块包括:消息提取子模块,用于通过python,从消息队列中逐条取出消息体,并获取消息体的任务id以及时间戳;接口调用子模块,用于调用api接口,将携带任务id以及时间戳的消息体压入到第二数据库。
14.在一些实施例中,所述异步处理模块还包括:任务判断子模块,用于抽取任务结束后返回一个状态码,并根据状态码判断任务是否执行成功;键值写入子模块,用于任务执行失败后,在第二数据库中写入键为任务id和时间戳,值为“error”的数据。
15.在一些实施例中,所述判断处理模块还包括:键值拼接子模块,用于继续获取队列消息,将当前消息的任务id和时间戳进行拼接作为键,并对键值进行判断;键值判断子模块,用于判断键值,若键值为“error”,则跳过抽取任务,并在返回一个空值后重新将消息送入消息队列;若键值不为“error”,执行抽取任务。
16.本技术的有益效果是:本技术提供的一种异步队列任务的报错处理方法及系统,通过将消息的任务id和时间戳结合,并作为消息体的唯一标识,在异步任务执行异常时,向redis数据库中写入键为任务id和时间戳,值为“error”的唯一标识数据,当执行下一个消息时候,与库里边存放的唯一标识作比较,如果相同,说明该消息与上一个消息属于同一个任务,直接跳过,从而减少了消息异步处理的时间。
附图说明
17.图1为本技术的异步队列任务的报错处理方法流程图;图2为本技术步骤s1的子流程图;图3为本技术步骤s2的子流程图;图4为本技术步骤s3的子流程图;图5为本技术步骤s4的子流程图。
具体实施方式
18.以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
19.为了能够更清楚地理解本技术的上述目的、特征和优点,下面结合附图和实施例对本技术作进一步的详细说明。可以理解的是,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。此处所描述的具体实施例仅仅用于解释本技术,而非对本技术的限定。基于所描述的本技术的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本技术保护的范围。
20.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
21.图1为本技术的异步队列任务的报错处理方法流程图。
22.异步队列任务的报错处理方法,结合图1,包括以下步骤:s1:将诊断文本进行分组预处理,并存入消息队列中;在一些实施例中,结合图2即本技术步骤s1的子流程图,所述s1包括:s11:通过java将诊断文本平均分为多个消息体;s12:将任务id和时间戳作为消息体的唯一标识,并将消息体压入消息队列中。
23.具体的,本方案是基于医疗诊断文本的异步队列消息处理,由于诊断文本的数据量通常较大,因此需要先将诊断文本经过java端处理(如:将30000条分成100份等相关操作),同时携带上任务id并加上时间戳,将任务id和时间戳作为消息体的唯一标识,然后送入到rabbit mq消息队列中。
24.s2:从消息队列中逐组取出消息,并通过api接口压入第一数据库中;在一些实施例中,结合图3即本技术步骤s2的子流程图,所述s2:s21:通过python,从消息队列中逐条取出消息体,并获取消息体的任务id以及时间戳;
s22:调用api接口,将携带任务id以及时间戳的消息体压入到第二数据库。
25.具体的,在进行异步任务前,需要提取消息体,并获取消息体的任务id以及时间戳,本方案中采用python来获取消息体以及消息体的任务id和时间戳,然后,通过python端调用api接口,将携带任务id以及时间戳的消息体压入到第二数据库之中。需要说明的是,本方案中的第一数据库以及第二数据库均为了redis数据库。
26.s3:异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;在一些实施例中,结合图4即本技术步骤s3的子流程图,所述s3中“若执行失败,则向第二数据库写入识别键值”包括:s31:抽取任务结束后返回一个状态码,并根据状态码判断任务是否执行成功;s32:若任务执行失败,则在第二数据库中写入键为任务id和时间戳,值为“error”的数据。
27.具体的,本方案的目的在于,在异步任务发生执行异常时,跳过相同的任务,从而减少异步任务执行时间,因此,对于关系抽取任务是否执行成功需要进行判断,本方案中抽取任务结束后会返回一个状态码,通过判断该状态码可以知道任务是否执行成功,进而,如果执行不成功,那么在第二数据库中写入key(键)=任务id+时间戳, value(值)=“error”的数据。
28.s4:继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务。
29.在一些实施例中,结合图5即本技术步骤s4的子流程图,所述s4包括:s41:继续获取队列消息,将当前消息的任务id和时间戳进行拼接作为键,并对键值进行判断;s42:若键值为“error”,则跳过抽取任务,并在返回一个空值后重新将消息送入消息队列;若键值不为“error”,执行抽取任务。
30.具体的,在异步任务异常判断后,若存在执行不成功的情况,那么第二数据库中就存储了该消息的key(键)=任务id+时间戳, value(值)=“error”的唯一标识数据,那么在下一个消息执行关系抽取任务之前,可以通过将该消息的任务id和时间戳进行拼接作为该消息的键,并判断该键是否与值“error”对应,若对应,则当前消息与发生异常的消息属于同一个任务,则可直接跳过当前消息,进入下一消息。
31.s5:重复s3-s4步骤,直到消息处理完毕。
32.具体的,重复s3-s4步骤,即可在异步任务的过程中,如果获知了上一条消息没有执行成功,而当前消息和上一条消息出自同一个任务,则可直接跳过抽取任务,再次执行另外一条,如此循环,直到该任务中的所有的消息处理完毕。本方案对异步消息队列任务的过程进行了优化,如果某一个任务有100条消息需要处理,当执行到第2条消息时报错,那么后边的98条消息就会直接跳过抽取流程,大大节省了时间。
33.本发明第二方面还提供了异步队列任务的报错处理系统,包括:消息预处理模块,用于将诊断文本进行分组预处理,并存入消息队列中;数据传输模块,用于从消息队列中取出一组消息,并通过api接口压入第一数据库中;
异步处理模块,用于异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;判断处理模块,用于继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务;循环任务模块,用于重复异步处理模块以及键值判断模块的步骤,直到消息处理完毕。
34.在一些实施例中,所述消息预处理模块包括:消息分组子模块,用于通过java将诊断文本平均分为多个消息体;标识获取子模块,用于将任务id和时间戳作为消息体的唯一标识,并将消息体压入消息队列中。
35.在一些实施例中,所述数据传输模块包括:消息提取子模块,用于通过python,从消息队列中逐条取出消息体,并获取消息体的任务id以及时间戳;接口调用子模块,用于调用api接口,将携带任务id以及时间戳的消息体压入到第二数据库。
36.在一些实施例中,所述异步处理模块还包括:任务判断子模块,用于抽取任务结束后返回一个状态码,并根据状态码判断任务是否执行成功;键值写入子模块,用于任务执行失败后,在第二数据库中写入键为任务id和时间戳,值为“error”的数据。
37.在一些实施例中,所述判断处理模块还包括:键值拼接子模块,用于继续获取队列消息,将当前消息的任务id和时间戳进行拼接作为键,并对键值进行判断;键值判断子模块,用于判断键值,若键值为“error”,则跳过抽取任务,并在返回一个空值后重新将消息送入消息队列;若键值不为“error”,执行抽取任务。
38.本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本技术的范围之内并且形成不同的实施例。
39.本领域的技术人员能够理解,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
40.虽然结合附图描述了本技术的实施方式,但是本领域技术人员可以在不脱离本技术的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
41.以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要
求的保护范围为准。

技术特征:
1.异步队列任务的报错处理方法,其特征在于,包括以下步骤:s1:将诊断文本进行分组预处理,并存入消息队列中;s2:从消息队列中逐组取出消息,并通过api接口压入第一数据库中;s3:异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;s4:继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务;s5:重复s3-s4步骤,直到消息处理完毕。2.根据权利要求1所述的异步队列任务的报错处理方法,其特征在于,所述s1包括:s11:通过java将诊断文本平均分为多个消息体;s12:将任务id和时间戳作为消息体的唯一标识,并将消息体压入消息队列中。3.根据权利要求1所述的异步队列任务的报错处理方法,其特征在于,所述s2:s21:通过python,从消息队列中逐条取出消息体,并获取消息体的任务id以及时间戳;s22:调用api接口,将携带任务id以及时间戳的消息体压入到第一数据库。4.根据权利要求1所述的异步队列任务的报错处理方法,其特征在于,所述s3中“若执行失败,则向第二数据库写入识别键值”包括:s31:抽取任务结束后返回一个状态码,并根据状态码判断任务是否执行成功;s32:若任务执行失败,则在第二数据库中写入键为任务id和时间戳,值为“error”的数据。5.根据权利要求1所述的异步队列任务的报错处理方法,其特征在于,所述s4包括:s41:继续获取队列消息,将当前消息的任务id和时间戳进行拼接作为键,并对键值进行判断;s42:若键值为“error”,则跳过抽取任务,并在返回一个空值后重新将消息送入消息队列;若键值不为“error”,执行抽取任务。6.异步队列任务的报错处理系统,其特征在于,包括:消息预处理模块,用于将诊断文本进行分组预处理,并存入消息队列中;数据传输模块,用于从消息队列中取出一组消息,并通过api接口压入第一数据库中;异步处理模块,用于异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;判断处理模块,用于继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务;循环任务模块,用于重复异步处理模块以及键值判断模块的步骤,直到消息处理完毕。7.根据权利要求6所述的异步队列任务的报错处理系统,其特征在于,所述消息预处理模块包括:消息分组子模块,用于通过java将诊断文本平均分为多个消息体;标识获取子模块,用于将任务id和时间戳作为消息体的唯一标识,并将消息体压入消息队列中。8.根据权利要求6所述的异步队列任务的报错处理系统,其特征在于,所述数据传输模块包括:
消息提取子模块,用于通过python,从消息队列中逐条取出消息体,并获取消息体的任务id以及时间戳;接口调用子模块,用于调用api接口,将携带任务id以及时间戳的消息体压入到第一数据库。9.根据权利要求6所述的异步队列任务的报错处理系统,其特征在于,所述异步处理模块还包括:任务判断子模块,用于抽取任务结束后返回一个状态码,并根据状态码判断任务是否执行成功;键值写入子模块,用于任务执行失败后,在第二数据库中写入键为任务id和时间戳,值为“error”的数据。10.根据权利要求6所述的异步队列任务的报错处理系统,其特征在于,所述判断处理模块还包括:键值拼接子模块,用于继续获取队列消息,将当前消息的任务id和时间戳进行拼接作为键,并对键值进行判断;键值判断子模块,用于判断键值,若键值为“error”,则跳过抽取任务,并在返回一个空值后重新将消息送入消息队列;若键值不为“error”,执行抽取任务。

技术总结
本发明提供了一种异步队列任务的报错处理方法及系统,该方法包括以下步骤:S1:将诊断文本进行分组预处理,并存入消息队列中;S2:从消息队列中逐组取出消息,并通过API接口压入第一数据库中;S3:异步任务开启,从第一数据库获取队列消息,解析后送入到抽取模型中执行关系抽取任务,若执行失败,则向第二数据库写入识别键值;S4:继续获取队列消息,并判断识别键值是否与当前消息的键对应,若对应,则当前消息跳过关系抽取任务;S5:重复S3-S4步骤,直到消息处理完毕。本发明所提供的一种异步队列任务的报错处理方法及系统,通过获取异常任务的任务ID+时间戳作为唯一标识,从而判断后续任务是否可以直接跳过不处理,进而达到减少消息处理时间的目的。处理时间的目的。处理时间的目的。


技术研发人员:宋佳祥 白琨太 刘硕 杨雅婷 许娟
受保护的技术使用者:神州医疗科技股份有限公司
技术研发日:2023.06.26
技术公布日:2023/8/1
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐