一种异步消息处理方法、终端、系统及存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种异步消息处理方法、终端、系统及计算机可读存储介质。
背景技术
异步消息是消息中间件中的概念,存放在消息队列中,通常用于同步操作异步化与业务逻辑解耦。比如生产者发送特定结构的消息到队列中之后,消费者订阅消息队列,获取消息并消费。例如现在的支付和服务分发业务,普遍存在交易结果通知回调,而且要求要做到最大努力通知,现在的支付和服务分发业务及审计日志业务,都要求尽量做成异步的,不要影响主业务。
在实现本发明的过程中,发明人发现现有技术中至少存在如下问题:
现有的技术方案是消息生产者和消费者,都直接连接到消息中间件,操作同一个消息队列,生产者发送消息,消费者消费消息,该技术方案中的原始开发模式,虽然比较灵活,但是对代码的复用程度最低,工作效率非常低,不能适应业务灵活变化,也不能快速响应需求。
发明内容
针对上述问题,本发明的目的在于提供一种异步消息处理方法、终端、系统及计算机可读存储介质,将大量的业务细节抽象为配置项,将高难度的开发工作变成简单的配置化工作,具有较高的可扩展性。
第一方面,本发明实施例提供了一种异步消息处理方法,包括以下步骤:
接收订阅的消息队列推送的具有投递目标的消息;其中,所述投递目标用于配置消费细节;
根据所述消费细节将所述具有投递目标的消息交与对应的处理器进行处理;
获取所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果。
在本发明第一方面的第一种实现方式中,所述投递目标包括目标编码、目标类型及目标参数;
则所述根据所述消费细节将所述具有投递目标的消息交与对应的处理器,以使所述处理器进行处理,具体为:
根据所述目标编码及目标类型获取对应的处理器;
将所述具有投递目标的消息委托所述处理器,以使所述处理器根据所述目标参数对所述具有投递目标的消息进行处理。
在本发明第一方面的第二种实现方式中,还包括:
向消息队列发起消息队列订阅请求;其中,所述消息队列用于接收业务终端通过生产者服务器发送的具有投递目标的消息。
在本发明第一方面的第三种实现方式中,所述投递目标还包括消费结果分析策略;
则在所述接收所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果之后,还包括:
将所述消费结果代入预定的条件,通过所述条件配置的值计算类型和取值表达式计算得到回参的特定字段值,最后将其与所述条件定义的条件值比较,以确认是否成功消费所述具有投递目标的消息。
根据本发明第一方面的第三种实现方式,在本发明第一方面的第四种实现方式中,所述投递目标还包括重试策略;
则所述异步消息处理方法,还包括:
当判断对所述具有投递目标的消息消费失败时,根据所述重试策略、所述具有投递目标的消息及所述消费结果生成异常消息,并将所述异常消息存入异常消息数据库中。
根据本发明第一方面的第四种实现方式,在本发明第一方面的第五种实现方式中,还包括:
在所述异常消息数据库中存在至少一条未达重试上限值的异常消息之前:
根据所述重试策略,定时从所述异常消息数据库中获取预设数量的异常消息进行重新消费。
第二方面,本发明实施例提供了一种异步消息处理终端,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面中任意一项所述的异步消息处理方法。
第三方面,本发明实施例提供了一种异步消息处理系统,包括至少一个如第二方面所述的异步消息处理终端,至少一个生产服务终端及消息中间件;其中,
所述生产服务终端,用于将所述具有投递目标的消息传输到所述消息中间件对应的消息队列中;
所述消息中间件,用于接收所述生产服务终端传输到消息队列的具有投递目标的消息,并向订阅所述消息队列的消费者终端推送所述具有投递目标的消息;
所述异步消息处理终端,用于接收所述消息中间件推送的具有投递目标的消息;其中,所述投递目标用于配置消费细节;
所述异步消息处理终端,还用于根据所述消费细节将所述具有投递目标的消息交与对应的处理器进行处理;
所述异步消息处理终端,还用于获取所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果。
在本发明第三方面的第一种实现方式中,还包括:至少一个业务终端;其中,
所述业务终端,用于向所述生产服务终端投递具有投递目标的消息;
则所述生产服务终端,具体用于将所述业务终端投递的所述具有投递目标的消息传输到所述消息中间件对应的消息队列中。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述中任意一项所述的异步消息处理方法。
本发明实施例提供了一种异步消息处理方法、系统及计算机可读存储介质,其一个实施例具有如下有益效果:
通过订阅的消息队列推送的具有投递目标的消息,所述投递目标用于配置消费细节,然后根据所述消费细节将所述具有投递目标的消息交与对应的处理器进行处理,最后获取所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果,通过接收具有配置投递目标的消息,使得异步消息处理终端可以根据所述投递目标按部就班的消费消息,将大量的业务细节抽象为配置项,通过读取配置项即可获取操作的全部流程与细节,对应的处理器即可根据读取的流程进行快速的处理,将高难度的开发工作变成简单的配置化工作,实现高效处理流程,且可以根据业务发展需要实时配置投递目标或者扩展出新的消费的投递目标,具有较高的可扩展性。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明第一实施例提供的异步消息处理方法的流程示意图。
图2是本发明第一实施例提供的所述具有投递目标的消息的各个配置项的示意图。
图3是本发明第六实施例提供的异步消息处理系统的结构示意图。
图4是本发明第七实施例提供的异步消息处理系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,本发明第一实施例提供了一种异步消息处理方法,其可由异步消息处理终端来执行,并包括以下步骤:
S11,接收订阅的消息队列推送的具有投递目标的消息;其中,所述投递目标用于配置消费细节。
在本发明实施例中,所述异步消息处理终端根据实际需要订阅消息队列,当在消息队列中有新的配置后的投递消息时,所述消息中间件向所述异步消息处理终端推送具有投递目标的消息,所述异步消息处理终端在接收消息中间件推送的具有投递目标的消息后根据所述投递目标进行相应处理,所述消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。请参阅表1,为所述具有投递目标的消息的设置格式,所述具有投递目标的消息具有特定的结构,表示为JSON格式,是生产者和消费者沟通的基础,其关键属性有目标编码、目标类型及目标参数,所述目标编码,根据消费者集群的订阅获取所述消费者集群对应的消费者线程的参数,以获取所述参数对应的目标类型;所述目标类型,包括DB目标、HTTP目标、TXT目标及JPG目标等等,表示消息的执行类型或者种类,所述DB目标即数据库信息执行过程,所述HTTP目标即网络处理执行过程、所述TXT目标即文本执行过程,所述JPG目标即图片处理执行过程,可根据实际情况扩展并实现更多的类型,本发明对此不做任何限定;所述目标参数体现消息的消费细节或消费流程,包含URL、param、body三个,其中param是Map型对象,所述URL,即统一资源定位符,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址;所述Map,即将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值;所述body,是消息内容的主体,包含消息的所有内容。
表1
S12,根据所述消费细节将所述具有投递目标的消息交与对应的处理器进行处理。
在本发明实施例中,所述投递目标包括目标编码、目标类型及目标参数,则所述异步消息处理终端根据所述目标编码及目标类型获取对应的处理器,然后将所述具有投递目标的消息委托所述处理器,以使所述处理器根据所述目标参数对所述具有投递目标的消息进行处理。所述异步消息处理终端在获取所述具有投递目标的消息后,提取所述投递目标中的目标编码,请参阅表1,所述消费者线程通过自身的参数入参到目标编码函数中获取该消息的目标类型及消费的目标参数,请参阅图2,所述目标类型包括有DB目标和HTTP目标,所述目标参数是图2中“DB目标”、“HTTP目标”、“DB配置”、“HTTPHead”及“HTTPParam”具体抽象化的结果,抽象后的数据结构是[属性Id、目标Id、属性组、属性键名、属性值],在原始消息消费配置的时候,不同的目标类型,使用不同的属性组和属性键名,每个消息类型都有对应的处理器,所述异步消息处理终端根据所述投递目标获取如何消费的细节,即所述目标参数,如DB目标的消费细节是数据库连接信息和将要执行的SQL语句,具体地,根据所述原始消息查询是什么数据库,执行什么SQL语句,参数从消息中获取,三个混合就可以实现DB目标的消费,获取这三个内容(目标编码、目标类型及目标参数)即可知道所述原始消息的消费过程;HTTP目标的消费细节是请求头header,请求参数,请求方式,请求的URL,这些参数存储在所述目标参数中,然后所述异步消息处理终端将根据查询的消费细节,即所述目标参数委托对应的处理器进行消费处理,以使所述处理器根据所述目标参数进行处理,在消费处理后返回消费结果,实现规则的配置化,消费者只需按部就班即可完成消费消息的过程,节省CPU的分析与计算资源。
S13,获取所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果。
在本发明实施例中,所述异步消息处理终端在获取所述具有投递目标的消息的目标类型并将该消息交与对应的处理器消费处理后,所述处理器在消费处理后生成消费结果并将所述消费结果同步返回给所述异步消息处理终端,以便所述异步消息处理终端在接收所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果后,对所述消费结果进行分析处理。
综上所述,本发明实施例提供了一种异步消息处理方法,通过订阅的消息队列推送的具有投递目标的消息,所述投递目标用于配置消费细节,然后根据所述消费细节将所述具有投递目标的消息交与对应的处理器进行处理,最后获取所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果,通过接收具有配置投递目标的消息,使得异步消息处理终端可以根据所述投递目标按部就班的消费消息,将大量的业务细节抽象为配置项,通过读取配置项即可获取操作的全部流程与细节,对应的处理器即可根据读取的流程进行快速的处理,将高难度的开发工作变成简单的配置化工作,实现高效处理流程,且可以根据业务发展需要实时配置投递目标或者扩展出新的消费的投递目标,具有较高的可扩展性。
本发明第二实施例:
在本发明第一实施例的基础上,还包括:
向消息队列发起消息队列订阅请求;其中,所述消息队列用于接收业务终端通过生产者服务器发送的具有投递目标的消息。
在本发明实施例中,异步消息处理终端根据实际需要订阅提供不同功能的消息队列,所述消息队列所属的消息中间件在接收到异步消息处理终端对消息队列的订阅请求时,将所述异步消息处理终端及所述消息队列进行关联,以便所述消息中间件在检测到有生产服务终端传输具有投递目标的消息投递到所述消息队列时,通过获取所述消息队列关联的异步消息处理终端,然后将所述消息推送到所述异步消息处理终端上。
本发明第三实施例:
在本发明第一实施例的基础上,所述投递目标还包括消费结果分析策略。
则在所述S13之后,还包括:
将所述消费结果代入预定的条件,通过所述条件配置的值计算类型和取值表达式计算得到回参的特定字段值,最后将其与所述条件定义的条件值比较,以确认是否成功消费所述具有投递目标的消息。
在本发明实施例中,所述消费结果分析策略的策略类型包括成功策略和失败策略,如果当前实现了成功,则失败作为预留,具体地,请参阅图2,所述异步消息处理终端在接收所述处理器根据所述投递目标获取的目标编码及目标参数处理所述具有投递目标的消息后返回的消费结果,所述异步消息处理终端将所述消费结果带入“条件”中进行计算,不同的消息具有不同的条件计算过程,具体条件的实现过程由具体的情形决定,本发明对此不做任何限定,所述消费结果通过“条件”配置的“值计算类型”和“取值表达式”计算得到回参的特定字段值,最后将其与预设的“条件值”进行比较,以确认是否成功消费消息,若比较一致或者在所述“条件值”预设的范围内,则确认所述异步消息处理终端消费成功,若比较不一致或者不在所述“条件值”预设的范围内,则确认所述异步消息处理终端消费失败,其中“值计算类型”是可扩展的,可以是HTTP返回码、xpath表达式、jsonpath表达式、正则表达式等等,其中,所述xpath是使用路径表达式来选取XML文档中的节点或节点集,节点是通过沿着路径(path)或者步(steps)来选取的;所述jsonpath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有想要获得的json内容;正则表达式,又称规则表达式(Regular Expression,常简写为regex、regexp或RE),计算机科学的一个概念,正则表通常被用来检索、替换那些符合某个模式(规则)的文本,本发明对于所述值计算类型的类型不做任何限定。
本发明第四实施例:
在本发明第三实施例的基础上,所述投递目标还包括重试策略。
则所述异步消息处理方法,还包括:
当判断对所述具有投递目标的消息消费失败时,根据所述重试策略、所述具有投递目标的消息及所述消费结果生成异常消息,并将所述异常消息存入异常消息数据库中。
在本发明实施例中,当判断所述异步消息处理终端消费失败时,即所述异步消息处理终端根据消费结果分析策略判断处理器返回失败的消费结果,则所述异步消息处理终端根据所述重试策略、所述具有投递目标的消息及所述消费结果生成异常消息,以便后续异步消息处理终端重新进行消费,然后所述异步消息处理终端在生成异常消息后将所述异常消息存入异常消息数据库中,当然,本领域的技术人员可以理解的是,也可以存到异常消息表中或者文本文档中,本发明对于异常消息的存储情况不做任何限定,请参阅图2,所述异常消息对应图2中的“消息”。
本发明第五实施例:
在本发明第四实施例的基础上,还包括:
在所述异常消息数据库中存在至少一条未达重试上限值的异常消息之前:
根据所述重试策略,定时从所述异常消息数据库中获取预设数量的异常消息进行重新消费。
在本发明实施例中,所述异步消息处理终端定时梳理自身消费失败的消息,定时从所述异常消息数据库中获取预设数量的异常消息进行重新消费,直到所述消费者线程将所述终端设备推送的具有的投递目标的消息消费成功或者达到重试策略的重试上限值,没有待重试的消息为止。
请参阅图3,本发明第六实施例提供了一种异步消息处理系统,包括至少一个上述的异步消息处理终端11,至少一个生产服务终端12及消息中间件13。其中,
所述生产服务终端12,用于将所述具有投递目标的消息传输到所述消息中间件对应的消息队列中。
所述消息中间件13,用于接收所述生产服务终端传输到消息队列的具有投递目标的消息,并向订阅所述消息队列的消费者终端推送所述具有投递目标的消息。
所述异步消息处理终端11,用于接收所述消息中间件推送的具有投递目标的消息;其中,所述投递目标用于配置消费细节。
所述异步消息处理终端11,还用于根据所述消费细节将所述具有投递目标的消息交与对应的处理器进行处理。
所述异步消息处理终端11,还用于获取所述处理器根据所述具有投递目标的消息进行处理后返回的消费结果。
在本发明实施例中,所述异步消息处理终端根据实际需要订阅消息队列,所述消息中间件在接收到异步消息处理终端对消息队列的订阅请求时,将所述异步消息处理终端及所述消息队列进行关联,以便所述消息队列在检测到有消息投递到所述消息队列时,通过获取所述消息队列关联的异步消息处理终端,然后将所述消息推送到所述异步消息处理终端上。
请参阅图4,本发明第七实施例还提供了一种异步消息处理系统,还包括至少一个业务终端14。其中,
所述业务终端,用于向所述生产服务终端投递具有投递目标的消息。
则所述生产服务终端,具体用于将所述业务终端投递的所述具有投递目标的消息传输到所述消息中间件对应的消息队列中。
在本发明实施例中,业务终端根据实际需要在其对应的业务方流程上生成具有投递目标的消息,并将所述具有投递目标的消息发送给所述生产服务终端,所述生产服务终端在接收所述业务终端投递的具有投递目标的消息后,将所述具有投递目标的消息传输到所述消息中间件对应的消息队列上,改变原有的业务终端直接把消息投递到消息队列,然后订阅该消息队列的异步消息处理终端从消息队列获取消息的模式,实现业务方不直接依赖消息中间件,降低了业务方与消息中间件的耦合程度。
本发明第八实施例提供了一种异步消息处理终端。该实施例的异步消息处理终端包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如异步消息处理程序。所述处理器执行所述计算机程序时实现上述各个异步消息处理方法实施例中的步骤,例如图1所示的步骤S12。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述异步消息处理终端设备中的执行过程。
所述异步消息处理终端可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述异步消息处理终端可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述部件仅仅是异步消息处理终端的示例,并不构成对异步消息处理终端的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述异步消息处理终端还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述异步消息处理终端设备的控制中心,利用各种接口和线路连接整个异步消息处理终端的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述异步消息处理终端的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
其中,所述异步消息处理终端集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。