CN114090210A - 一种服务调用的实现方法及装置 - Google Patents
一种服务调用的实现方法及装置 Download PDFInfo
- Publication number
- CN114090210A CN114090210A CN202111397560.1A CN202111397560A CN114090210A CN 114090210 A CN114090210 A CN 114090210A CN 202111397560 A CN202111397560 A CN 202111397560A CN 114090210 A CN114090210 A CN 114090210A
- Authority
- CN
- China
- Prior art keywords
- service
- asynchronous
- thread
- response result
- transaction response
- 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/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
- 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/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种服务调用的实现方法及装置,属于大数据,该方法包括:当服务提供者的异步响应轮询器获取到服务调用方的请求所对应的异步交易响应结果时,根据异步交易响应结果,判断该响应结果是否属于异步响应轮询器所对应的第一服务内预先阻塞的第一线程;若判断结果为是,将异步交易响应结果传递给第一线程,并唤醒第一线程以继续执行;若判断结果为否,将异步交易响应结果转发至对应的服务提供者的服务间消息传递队列;服务间消息传递队列的消息轮询器获取异步交易响应结果,并将异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程,并唤醒第二线程以继续执行。在高并发需求的情况下,能有效降低系统资源的损耗,提高了处理效率。
Description
技术领域
本发明涉及分布式系统技术领域,尤其涉及一种服务调用的实现方法及装置。
背景技术
在微服务环境中,单一应用程序划分成一组小的服务称为微服务,微服务之间互相协调、互相配合,为用户提供最终价值。为了保证事务性数据的一致,各微服务之间常采用异步方式转同步数据进行数据协调,此过程中采用数据库作为数据协调器,把异步交易响应结果写入数据库,多个微服务应用不间断的轮询数据库表数据,从表中查询出属于本服务器的异步交易响应结果并处理,将异步转同步数据协调过程中,涉及数据库表的数据库表查询、插入、删除操作,操作的过程中带有事务,为了维护事务一致性付出代价,导致其读写性能较差,并在面临高并发读写需求时,硬盘IO是一个很大瓶颈,另外在无数据时存在大量的空轮询操作会对数据库造成巨大压力,因此使用数据库作为数据协调器在高并发情况下可能存在性能消耗高、处理效率较低的问题。
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
发明内容
本发明实施例提供一种服务调用的实现方法,该方法包括:
当服务提供者的异步响应轮询器获取到服务调用方的请求所对应的异步交易响应结果时,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程;
若判断结果为是,则将所述异步交易响应结果传递给所述第一线程,并唤醒所述第一线程以继续执行;
若判断结果为否,则将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列;
所述服务间消息传递队列的消息轮询器获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程,并唤醒所述第二线程以继续执行。
在一个实施例中,上述服务调用的实现方法,还包括:
所述服务提供者启动时,启动预设的所述异步响应轮询器和所述消息轮询器,并创建线程等待池,所述线程等待池为用于暂存阻塞的线程。
在一个实施例中,服务提供者的异步响应轮询器获取到异步交易响应结果之前,上述服务调用的实现方法还包括:
所述服务提供者接收到服务调用方发起的交易请求时,按照预设的接口规则组装异步交易请求报文,发送所述异步请求报文至异步中间件;
将处理所述交易请求的线程存入所述线程等待池,并阻塞所述线程。
在一个实施例中,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程,包括:
解析所述异步交易响应结果,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与所述服务的应用标识的映射关系,确定是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程。
在一个实施例中,所述服务间消息传递队列为Kafka队列,每个所述kafka队列与应用标识对应;
所述将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列,包括:
根据所述异步交易响应结果所属的服务的应用标识,确定与所述应用标识对应的kafka队列,并将所述异步交易响应结果转发至对应的Kafka队列。
在一个实施例中,所述消息轮询器为Kafka消息轮询器;
所述服务间消息传递队列的消息轮询器获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程,包括:
Kafka消息轮询器从Kafka队列中获取所述异步交易响应结果并解析,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定所述异步交易响应结果所属的第二线程,将所述异步交易响应结果传递给所述第二线程。
在一个实施例中,唤醒所述第一线程以继续执行或唤醒第二线程以继续执行之后,还包括:
所述第一线程或第二线程按照预设的接口规则解析所述异步请求响应结果,并根据接口规则组装响应结果并将结果返回服务调用方。
本发明实施例还提供一种服务调用的实现装置,包括:异步响应轮询器模块、消息轮询器模块、线程等待池模块、结果传递模块和唤醒模块,其中:
异步响应轮询器模块,用于当获取到服务调用方的请求所对应的异步交易响应结果时,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程;
结果传递模块,用于当异步响应轮询器模块判断结果为是时,则将所述异步交易响应结果传递给所述第一线程;当异步响应轮询器模块判断结果为否时,将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列;
所述消息轮询器模块,用于获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程;
唤醒模块,用于唤醒所述第一线程或第二线程以继续执行;
线程等待池模块,用于暂存阻塞的第一线程和第二线程。
在一个实施例中,所述服务间消息传递队列为Kafka队列,每个所述kafka队列与应用标识对应;
结果传递模块,具体用于根据所述异步交易响应结果所属的服务的应用标识,确定与所述应用标识对应的kafka队列,并将所述异步交易响应结果转发至对应的Kafka队列。
在一个实施例中,所述消息轮询器模块为Kafka消息轮询器模块;
所述Kafka消息轮询器模块,具体用于从Kafka队列中获取所述异步交易响应结果并解析,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定所述异步交易响应结果所属的第二线程,将所述异步交易响应结果传递给所述第二线程。
在一个实施例中,服务调用的实现装置,还包括:
结果返回模块,用于按照预设的接口规则解析所述异步请求响应结果,并根据接口规则组装响应结果并将结果返回服务调用方。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述服务调用的实现方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述服务调用的实现方法。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述服务调用的实现方法。
本发明实施例中,本发明实施例提供的服务提供者的异步响应轮询器获取到与服务调用方的请求所对应的异步交易响应结果时,若该响应结果为异步响应轮询器所对应的第一服务内预先阻塞的第一线程,则直接发送并唤醒第一线程进行响应结果的后续处理,如果不是,则继续将其转发到服务间消息传递队列,以便于服务间消息传递队列消息轮询器根据该响应结果,确定出其所属的第二服务内预先阻塞的第二线程,并将其传递并唤醒第二线程进行响应结果的后续处理,本发明实施例在异步转同步数据协调过程中,优先采用异步响应轮询器确定是否为本服务应用中阻塞的线程所处理,当不是时,转由其他服务应用中对应的线程进行处理,与现有技术使用数据库作为数据协调器的技术方案相比,在处理的过程中避免了大量的空轮询操作,在高并发需求的情况下,能够有效地降低系统资源的损耗,且提高了处理效率。
并且,本发明实施例还进一步利用了Kafka队列以及对应Kafka消息轮询器,Kafka队列是一个分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力,通过Kafka队列以及对应Kafka消息轮询器,可以满足在高并发的情况下的快速读取和写入,满足系统高性能的需求。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中服务调用的实现方法的流程图之一;
图2为本发明实施例中服务调用的实现方法的流程图之二;
图3为本发明实施例中服务调用的实现方法的流程图之三;
图4为本发明实施例中实例的信息交互图;
图5为本发明实施例中服务调用的实现装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
本发明属于大数据技术。本发明实施例提供了一种服务调用的实现方法,参照图1所示,包括下述步骤:
S11、当服务提供者的异步响应轮询器获取到服务调用方的请求所对应的异步交易响应结果时,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程;若判断结果为是,则执行下述步骤S12;否则执行下述步骤S13;
在本步骤S11中,通过解析异步交易响应结果,可以得到所述异步交易响应结果所属的服务的应用标识,再根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程。
S12、将所述异步交易响应结果传递给所述第一线程,并唤醒所述第一线程以继续执行;
S13、将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列;
S14、服务间消息传递队列的消息轮询器获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程,并唤醒所述第二线程以继续执行。
本发明实施例提供的服务提供者的异步响应轮询器获取到与服务调用方的请求所对应的异步交易响应结果时,若该响应结果为异步响应轮询器所对应的第一服务内预先阻塞的第一线程,则直接发送并唤醒第一线程进行响应结果的后续处理,如果不是,则继续将其转发到服务间消息传递队列,以便于服务间消息传递队列消息轮询器根据该响应结果,确定出其所属的第二服务内预先阻塞的第二线程,并将其传递并唤醒第二线程进行响应结果的后续处理,本发明实施例在异步转同步数据协调过程中,优先采用异步响应轮询器确定是否为本服务应用中阻塞的线程所处理,当不是时,转由其他服务应用中对应的线程进行处理,在处理的过程中避免了大量的空轮询操作,在高并发需求的情况下,能够有效地降低系统资源的损耗,且提高了处理效率。
在本发明实施例中,服务提供者有多个服务,每个服务在运行时需要使用线程池中的至少一个线程来执行对应的任务。服务提供者还拥有异步响应轮询器(一种负责轮询对外异步交易响应结果的常驻线程)、服务间消息传递队列和服务间消息传递队列的消息轮询器,以及用于暂存阻塞的线程的线程等待池等。
在本发明实施例中,为了给服务调用者的请求提供最快的交易响应结果,提高响应速度和效率,避免在处理响应请求时启动异步响应轮询器、消息轮询器和创建线程等待池等操作所带来的时间,在服务提供者启动时,就直接启动预设的所述异步响应轮询器和所述消息轮询器,并创建线程等待池。
在一个实施例中,参照图2所示,上述步骤S11服务提供者的异步响应轮询器获取到异步交易响应结果之前,所述方法还执行下述步骤S15和S16;
S15、服务提供者接收到服务调用方发起的交易请求时,按照预设的接口规则组装异步交易请求报文,发送异步请求报文至异步中间件;
上述异步中间件,可采用例如消息队列(MQ,Message Queue)等消息中间件,实现请求报文的异步处理。
S16、将处理交易请求的线程存入所述线程等待池,并阻塞线程。
阻塞现程即将线程暂时挂起,暂停处理,等待异步交易响应结果到达时再恢复至唤醒状态。
在一个实施例中,上述服务间消息传递队列例如可以采用Kafka队列,每个所述kafka队列与应用标识对应;
相对应地,上述步骤S13中将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列,例如可以通过下述方式实现:
根据所述异步交易响应结果所属的服务的应用标识,确定与所述应用标识对应的kafka队列,并将所述异步交易响应结果转发至对应的Kafka队列。
上述消息轮询器例如可为Kafka消息轮询器;
相对应地,上述步骤S14例如可以通过下述方式实现:
Kafka消息轮询器获取所述异步交易响应结果并解析,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定所述异步交易响应结果所属的第二线程,将所述异步交易响应结果传递给所述第二线程,唤醒第二线程以继续执行。
例如每个服务的应用对一个Kafka队列,该Kafka队列名称例如可以为服务的应用标识,而应用标识和线程是有对应关系的,Kafka消息轮询器可根据解析得到的服务的应用标识,找到应该处理该异步交易响应结果的线程,将该异步交易响应结果传递给它。
Kafka是一种高吞吐量、处理速度快的分布式发布订阅消息系统。Kafka队列是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者(producer)往队列里写消息,消费者(consumer)从队列里取消息执行业务逻辑。一般在架构设计中起到解耦、消峰、异步处理作用。Kafka对外使用主题(Topic)的概念,生产者往Topic里写消息,消费者从Topic中读取消息。
为了做到水平扩展,一个Topic实际是由多个分区(Partition)组成的,遇到系统瓶颈时,可以通过增加Partition的数量来进行横向扩容。单个Partition内保证消息有序性。每新写入一条消息,Kafka就是在对应的文件append写入,所以性能非常高。
采用Kafka队列和Kafka消息轮询器来完成异步交易响应结果的分发,在高并发的情况下,能够满足快速转发快速处理的效果,提高响应速度。
在一个实施例中,参照图3所示,本发明实施例提供的服务调用的实现方法,在上述步骤S12或S14之后,还执行下述步骤S17:
S17、第一线程或第二线程按照预设的接口规则解析所述异步请求响应结果,并根据接口规则组装响应结果并将结果返回服务调用方。
以一个简单的实例进行说明,该实例的信号流框图如图4所示,整个流程简述如下:
1.服务提供者在启动时,就同步启动了异步响应轮询器、Kafka消息轮询器,并且创建线程等待池;
2.当服务提供者接收到服务调用方发起的交易请求时,完成数据检查等逻辑。
3.按照接口规则组装异步交易请求报文,发送异步交易请求报文至异步中间件后,将当前线程存入线程等待池并阻塞,等待异步交易响应结果。
4.异步响应轮询器获取响应结果,解析出服务的应用标识,判断是否为本服务的应用内阻塞线程,如果是则执行5;否则执行6。
服务提供者拥有多个服务(例如图4中的服务1-服务N),服务调用方发送请求的过程,可能是调用了服务提供者多个服务中的某一个,并由多个服务中的某一个服务来处理并返回响应结果,因此,在得到该交易请求的异步交易响应结果时,异步响应轮询器需要判断是否是自身所属的服务来处理该异步响应结果,如果是,则直接进行处理,否则就要通过服务间消息队列,发送给其他服务进行后续处理。
假设异步响应轮询器所属的服务为服务1,且该异步交易响应结果解析出来服务的应用标识属于服务2,则判断该异步交易响应结果并不由服务1的线程来处理,执行下述步骤6,反之,如果该异步交易响应结果解析出来服务的应用标识属于服务1,则直接执行下面的步骤5。
5.从响应结果中解析得到异步请求messageId,根据messageId映射出阻塞线程,把响应结果传递给messageId对应的阻塞线程并唤醒其继续执行。
6.根据服务应用标识,将异步交易响应结果转发至服务提供者间消息传递Kafka队列(每个服务的应用对一个Kafka队列,队列名称为该服务的应用标识)。
依据上面的例子,会将异步交易响应结果转发至服务2的应用标识对应的Kafka队列中。
7.Kafka消息轮询器从Kafka队列中获取属于对应服务的异步请求响应结果,从响应结果中解析得到异步请求messageId,根据messageId映射出阻塞线程,把响应结果传递给messageId对应的阻塞线程并唤醒其继续执行。
例如,Kafka消息轮询器会从服务2的应用标识对应的Kafka队列中获取该异步请求响应结果,再根据异步响应结果中包含的异步请求的消息标识(messageId),找到对应的阻塞的线程,并将其唤醒以继续执行后的步骤。
8.按照接口规则解析异步请求响应结果,根据接口规则组装响应结果并将结果返回服务调用方。
被唤醒后的线程会继续将异步请求响应结果按照预设的接口规则进行组装后再返回给外部的服务调用方。
本发明实施例中还提供了一种服务调用的实现装置,如下面的实施例所述。由于该装置解决问题的原理与服务调用的实现方法相似,因此该装置的实施可以参见前述服务调用的实现方法的实施,重复之处不再赘述。
本发明实施例提供的一种服务调用的实现装置,参照图5所示,包括:异步响应轮询器模块51、消息轮询器模块52、线程等待池模块53、结果传递模块54和唤醒模块55,其中:
异步响应轮询器模块51,用于当获取到服务调用方的请求所对应的异步交易响应结果时,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程;
结果传递模块54,用于当异步响应轮询器模块判断结果为是时,则将所述异步交易响应结果传递给所述第一线程;当异步响应轮询器模块判断结果为否时,将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列;
消息轮询器模块52,用于获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程;
唤醒模块55,用于唤醒所述第一线程或第二线程以继续执行;
线程等待池模块53,用于暂存阻塞的第一线程和第二线程。
在一个实施例中,所述服务间消息传递队列为Kafka队列,每个所述kafka队列与应用标识对应;
相应地,上述结果传递模块54,具体用于根据所述异步交易响应结果所属的服务的应用标识,确定与所述应用标识对应的kafka队列,并将所述异步交易响应结果转发至对应的Kafka队列。
在一个实施例中,上述消息轮询器模块52为Kafka消息轮询器模块;该Kafka消息轮询器模块,具体用于从Kafka队列中获取所述异步交易响应结果并解析,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定所述异步交易响应结果所属的第二线程,将所述异步交易响应结果传递给所述第二线程。
本发明实施例提供的一种服务调用的实现装置,参照图5所示,还包括:
结果返回模块56,用于按照预设的接口规则解析所述异步请求响应结果,并根据接口规则组装响应结果并将结果返回服务调用方。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述服务调用的实现方法。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述服务调用的实现方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种服务调用的实现方法,其特征在于,包括:
当服务提供者的异步响应轮询器获取到服务调用方的请求所对应的异步交易响应结果时,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程;
若判断结果为是,则将所述异步交易响应结果传递给所述第一线程,并唤醒所述第一线程以继续执行;
若判断结果为否,则将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列;
所述服务间消息传递队列的消息轮询器获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程,并唤醒所述第二线程以继续执行。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述服务提供者启动时,启动预设的所述异步响应轮询器和所述消息轮询器,并创建线程等待池,所述线程等待池为用于暂存阻塞的线程。
3.如权利要求2所述的方法,其特征在于,服务提供者的异步响应轮询器获取到异步交易响应结果之前,所述方法还包括:
所述服务提供者接收到服务调用方发起的交易请求时,按照预设的接口规则组装异步交易请求报文,发送所述异步请求报文至异步中间件;
将处理所述交易请求的线程存入所述线程等待池,并阻塞所述线程。
4.如权利要求1所述的方法,其特征在于,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程,包括:
解析所述异步交易响应结果,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与所述服务的应用标识的映射关系,确定是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程。
5.如权利要求4所述的方法,其特征在于,所述服务间消息传递队列为Kafka队列,每个所述kafka队列与应用标识对应;
所述将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列,包括:
根据所述异步交易响应结果所属的服务的应用标识,确定与所述应用标识对应的kafka队列,并将所述异步交易响应结果转发至对应的Kafka队列。
6.如权利要求5所述的方法,其特征在于,所述消息轮询器为Kafka消息轮询器;
所述服务间消息传递队列的消息轮询器获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程,包括:
Kafka消息轮询器从Kafka队列中获取所述异步交易响应结果并解析,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定所述异步交易响应结果所属的第二线程,将所述异步交易响应结果传递给所述第二线程。
7.如权利要求1-6任一项所述的方法,其特征在于,唤醒所述第一线程以继续执行或唤醒第二线程以继续执行之后,还包括:
所述第一线程或第二线程按照预设的接口规则解析所述异步请求响应结果,并根据接口规则组装响应结果并将结果返回服务调用方。
8.一种服务调用的实现装置,其特征在于,包括:异步响应轮询器模块、消息轮询器模块、线程等待池模块、结果传递模块和唤醒模块,其中:
异步响应轮询器模块,用于当获取到服务调用方的请求所对应的异步交易响应结果时,根据所述异步交易响应结果,判断所述异步交易响应结果是否属于所述异步响应轮询器所对应的第一服务内预先阻塞的第一线程;
结果传递模块,用于当异步响应轮询器模块判断结果为是时,则将所述异步交易响应结果传递给所述第一线程;当异步响应轮询器模块判断结果为否时,将所述异步交易响应结果转发至对应的所述服务提供者的服务间消息传递队列;
所述消息轮询器模块,用于获取所述异步交易响应结果,并将所述异步交易响应结果传递给其所属的第二服务内预先阻塞的第二线程;
唤醒模块,用于唤醒所述第一线程或第二线程以继续执行;
线程等待池模块,用于暂存阻塞的第一线程和第二线程。
9.如权利要求8所述的装置,其特征在于,所述服务间消息传递队列为Kafka队列,每个所述kafka队列与应用标识对应;
结果传递模块,具体用于根据所述异步交易响应结果所属的服务的应用标识,确定与所述应用标识对应的kafka队列,并将所述异步交易响应结果转发至对应的Kafka队列。
10.如权利要求9所述的装置,其特征在于,所述消息轮询器模块为Kafka消息轮询器模块;
所述Kafka消息轮询器模块,具体用于从Kafka队列中获取所述异步交易响应结果并解析,得到所述异步交易响应结果所属的服务的应用标识,根据所述服务的应用标识,以及各线程与应用标识的映射关系,确定所述异步交易响应结果所属的第二线程,将所述异步交易响应结果传递给所述第二线程。
11.如权利要求8-10任一项所述的装置,其特征在于,还包括:
结果返回模块,用于按照预设的接口规则解析所述异步请求响应结果,并根据接口规则组装响应结果并将结果返回服务调用方。
12.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一所述服务调用的实现方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一所述服务调用的实现方法。
14.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一所述服务调用的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111397560.1A CN114090210A (zh) | 2021-11-23 | 2021-11-23 | 一种服务调用的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111397560.1A CN114090210A (zh) | 2021-11-23 | 2021-11-23 | 一种服务调用的实现方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090210A true CN114090210A (zh) | 2022-02-25 |
Family
ID=80303508
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111397560.1A Pending CN114090210A (zh) | 2021-11-23 | 2021-11-23 | 一种服务调用的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114090210A (zh) |
-
2021
- 2021-11-23 CN CN202111397560.1A patent/CN114090210A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729139B (zh) | 一种并发获取资源的方法和装置 | |
CN112527525B (zh) | 基于消息队列的分布式事件总线处理方法、终端及介质 | |
WO2016206600A1 (zh) | 一种信息流数据的处理方法和装置 | |
CN100483352C (zh) | Idl调用装置及调用方法 | |
CN112507029B (zh) | 数据处理系统及数据实时处理方法 | |
US20040068479A1 (en) | Exploiting asynchronous access to database operations | |
CN110134534B (zh) | 基于nio针对大数据分布式系统进行消息处理优化的系统及方法 | |
AU2019256257B2 (en) | Processor core scheduling method and apparatus, terminal, and storage medium | |
WO2021088641A1 (zh) | 数据发送方法、处理方法、接收方法及其设备、存储介质 | |
CN110413822B (zh) | 离线图像结构化分析方法、装置、系统和存储介质 | |
CN100450105C (zh) | 一种基于java消息服务的同步消息接口实现方法 | |
CN111858007A (zh) | 一种基于消息中间件的任务调度方法方法和装置 | |
CN112559476A (zh) | 一种用于提高目标系统性能的日志存储方法及其相关设备 | |
CN116382943A (zh) | 顺序消息处理方法、总线系统、计算机设备及存储介质 | |
CN111966653A (zh) | 微服务调用链路数据处理方法、装置、服务器及存储介质 | |
CN114064328A (zh) | 一种消息队列集群迁移方法及装置 | |
CN112689248A (zh) | 一种消息处理方法及系统 | |
CN113743879A (zh) | 一种自动化规则处理方法、系统以及相关设备 | |
CN114090210A (zh) | 一种服务调用的实现方法及装置 | |
CN116680209A (zh) | 基于wasm的多智能合约实例管理方法 | |
CN113992644A (zh) | 一种基于无服务技术的物联网关系统及其数据处理方法 | |
CN113190624A (zh) | 基于分布式跨容器的异步转同步调用方法及装置 | |
CN114296809B (zh) | 一种基于操作系统的对象模型构建方法及其系统调用接口 | |
CN110445874B (zh) | 一种会话处理方法、装置、设备和存储介质 | |
CN110647416B (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 |