掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及计算机技术领域,更具体地说,涉及到一种基于dubbo异步调用方法及装置。

背景技术

目前接口更多的是使用dubbo同步调用的方式,这种方式在请求量不大或者请求结果数 据量不大的时候能够胜任,因为他是阻塞式的,所以安全性比较高,数据质量也比较有保障, 但也因此有了一些局限性;当请求量比较多或者访问数据量比较大的时候,在这个请求过程 中会耗费大量的时间,甚至整个程序因为一直阻塞而导致挂掉,影响比较大,对调用方的体 验来说不太友好。

本发明内容

为了克服现有技术的不足,本发明提供一种基于dubbo异步调用方法用来如何减少线程 开销以及如何减小响应时间的问题。

本发明解决其技术问题所采用的技术方案是:一种基于dubbo异步调用方法,包括以下 步骤:

步骤一:消费端向服务端同时发送多个异步调用请求;

步骤二:所述服务端接收来自所述消费端同时发送的多个异步调用请求;

步骤三:所述服务端基于接收的多个异步调用请求,所述服务端对多个异步调用请求进 行响应;

步骤四:所述服务端将响应结果发送至所述消费端。

优选地,消费端向服务端同时发送多个异步调用请求之前,所述步骤还包括:

所述服务端启动线程调用服务用于唤醒所述消费端线程,以便于所述服务端进行异步调 用。

进一步优选地,消费端向服务端同时发送多个异步调用请求之后,所述步骤还包括:

所述服务端创建ResponseFuture对象;

使用适配器包装上述ResponseFuture对象。

进一步优选地,使用适配器包装上述ResponseFuture对象之后,所述步骤还包括:

所述消费端从线程上下文中获取Future对象。

进一步优选地,在所述服务端将响应结果发送至所述消费端之后,所述步骤还包括:

将所述响应结果放入Future对象通过FutureFilter唤醒阻塞的get方法。

一种基于dubbo异步调用系统,其特征在于,所述系统包括:

第一发送单元,用于消费端向服务端同时发送多个异步调用请求;

接收单元,用于所述服务端接收来自所述消费端同时发送的多个异步调用请求;

响应单元,用于所述服务端基于接收的多个异步调用请求,所述服务端对多个异步调用 请求进行响应;

第二发送单元,用于所述服务端将响应结果发送至所述消费端。

优选地,所述系统还包括:

启动单元,所述服务端启动线程调用服务用于唤醒所述消费端线程,以便于所述服务端 进行异步调用。

优选地,所述系统还包括:

创建单元,用于所述服务端创建ResponseFuture对象;

包装单元,用于使用适配器包装上述ResponseFuture对象。

优选地,所述系统还包括:

获取单元,用于所述消费端从线程上下文中获取Future对象。

优选地,所述系统还包括:

唤醒单元,用于将所述响应结果放入Future对象通过FutureFilter唤醒阻塞的get方法。

本发明的有益效果是:通过dubbo异步调用减少线程开销,不需要创建过多的线程,且 dubbo异步调用可以有效减小响应时间,同时,不会因为一个请求响应时间过长而一直阻塞 线程导致服务挂掉。

附图说明

图1是基于dubbo异步调用方法的流程示意图。

图2是基于dubbo异步调用系统的结构图。

图3是基于dubbo异步调用系统的另一结构图。

图4是基于dubbo异步调用系统的框架图。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整 地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一 部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性 劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有 联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联 接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提 下可以交互组合。

实施例一:

图1示出了本发明实施例一提供的基于dubbo异步调用方法的实现流程,为了便于说明, 仅示出了与本发明实施例相关的部分,详述如下:

在步骤S101中,消费端向服务端同时发送多个异步调用请求;

在实际应用过程中,当消费端需要在分布式系统中获取服务时,消费端请求分布式系统 中、与该服务对应的主节点提供服务,在主节点对消费端请求的服务进行处理的过程中,该 主节点可能需要对分布式系统中的其他节点(从节点)进行调用,才能完成消费端请求服务。

当主节点需要对分布式系统中其他节点进行调用时,主节点根据消费端请求的服务确定 需要调用的从节点。可选的,主节点可以根据服务中包括的子服务的类型,确定需要调用的 从节点,例如在主节点中可以存储子服务的类型与从节点的对应的关系,由此主节点可以根 据该对应关心,以及子服务的类型确定需要调用的从节点。

优选地,消费端向服务端同时发送多个异步调用请求之前,所述步骤还包括:

所述服务端启动线程调用服务用于唤醒所述消费端线程,以便于所述服务端进行异步调 用。

进一步优选地,消费端向服务端同时发送多个异步调用请求之后,所述步骤还包括:

所述服务端创建ResponseFuture对象;

使用适配器包装上述ResponseFuture对象。

进一步优选地,使用适配器包装上述ResponseFuture对象之后,所述步骤还包括:

所述消费端从线程上下文中获取Future对象。

在步骤S102中,所述服务端接收来自所述消费端同时发送的多个异步调用请求;

在本申请实施例中,所述异步调用请求包括主键信息、数据操作类型和操作时间戳信息。 当多个消费端同时向消费端发送异步调用请求并发执行,每个用户对应一个调用请求,该调 用请求时间可以为1分钟、2分钟、3分钟等等,根据时间最长的那个请求为一个周期,多个 异步调用请求并发执行,服务端在一个最长周期时间内提供服务,便于减少线程开销,不需 要创建过多的线程,且dubbo异步调用可以有效减小响应时间,同时,不会因为一个请求响 应时间过长而一直阻塞线程导致服务挂掉。

在步骤S103中,所述服务端基于接收的多个异步调用请求,所述服务端对多个异步调用 请求进行响应;

在本申请实施例中,服务端接收到多个不同调用请求,通过调用预设数量的线程对异步 调用请求进行响应,对异步任务表中靠前的异步调用任务进行处理,读取接口返回的数据, 并将返回的数据传输至消费端,其中,在执行某个异步调用任务之前,如果异步调用表中存 在与该异步调用任务的数据操作对象相同、操作时间在前而未执行的异步调用任务,则先执 行后续异步调用任务,跳过该异步调用任务的执行过程。通过建立异步调用任务表,利用异 步处理机制减少高并发对服务器性能的影响,解决高并发时,调用线程阻塞的问题。

在步骤S104中,所述服务端将响应结果发送至所述消费端。

在本申请实施例中,服务端将异步调用表中的异步调用任务执行完毕之后,将返回的数 据发送至消费端。

进一步优选地,在所述服务端将响应结果发送至所述消费端之后,所述步骤还包括:

将所述响应结果放入Future对象通过FutureFilter唤醒阻塞的get方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程 序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,所述的存 储介质,如ROM/RAM、磁盘、光盘等。

实施例二:

图2示出了本发明实施例二提供的基于dubbo异步调用系统的结构图,为了便于说明,仅 示出了与本发明实施例相关的部分,详述如下:

第一发送单元201,用于消费端向服务端同时发送多个异步调用请求;

接收单元202,用于所述服务端接收来自所述消费端同时发送的多个异步调用请求;

响应单元203,用于所述服务端基于接收的多个异步调用请求,所述服务端对多个异步 调用请求进行响应;

第二发送单元204,用于所述服务端将响应结果发送至所述消费端。

在本申请实施例中,消费端向服务端同时发送多个异步调用请求,所述服务端接收来自 所述消费端同时发送的多个异步调用请求,所述服务端基于接收的多个异步调用请求,所述 服务端对多个异步调用请求进行响应,所述服务端将响应结果发送至所述消费端,通过dubbo 异步调用减少线程开销,不需要创建过多的线程,且dubbo异步调用可以有效减小响应时间, 同时,不会因为一个请求响应时间过长而一直阻塞线程导致服务挂掉。

实施例三:

图3示出了本发明实施例三提供的基于dubbo异步调用系统的另一结构图,为了便于说明, 仅示出了与本发明实施例相关的部分,其中包括:

启动单元301,所述服务端启动线程调用服务用于唤醒所述消费端线程,以便于所述服 务端进行异步调用;

第一发送单元302,用于消费端向服务端同时发送多个异步调用请求;

创建单元303,用于所述服务端创建ResponseFuture对象;

包装单元304,用于使用适配器包装上述ResponseFuture对象;

获取单元305,用于所述消费端从线程上下文中获取Future对象;

接收单元306,用于所述服务端接收来自所述消费端同时发送的多个异步调用请求;

响应单元307,用于所述服务端基于接收的多个异步调用请求,所述服务端对多个异步 调用请求进行响应;

第二发送单元308,用于所述服务端将响应结果发送至所述消费端;

唤醒单元309,用于将所述响应结果放入Future对象通过FutureFilter唤醒阻塞的get方 法。

在本申请实施例中,所述服务端启动线程调用服务用于唤醒所述消费端线程,以便于所 述服务端进行异步调用;消费端向服务端同时发送多个异步调用请求;所述服务端创建 ResponseFuture对象;使用适配器包装上述ResponseFuture对象;所述消费端从线程上下文 中获取Future对象;所述服务端接收来自所述消费端同时发送的多个异步调用请求;所述服 务端基于接收的多个异步调用请求,所述服务端对多个异步调用请求进行响应;所述服务端 将响应结果发送至所述消费端;将所述响应结果放入Future对象通过FutureFilter唤醒阻塞 的get方法;通过dubbo异步调用减少线程开销,不需要创建过多的线程,且dubbo异步调用 可以有效减小响应时间,同时,不会因为一个请求响应时间过长而一直阻塞线程导致服务挂 掉。

实施例四:

图4示出了本发明实施例三提供的基于dubbo异步调用系统的框架图,为了便于说明,仅 示出了与本发明实施例相关的部分,其中包括:

过程1、2,在消费端的一个方法上配置async="true"表示异步调用,然后调用这个方法, 向服务端发起请求。

过程3,这里用到了Future模式,在服务端在执行获取结果数据时,执行重新发起请求。

具体步骤:服务端先创建ResponseFuture对象,之后使用FutureAdapter包装该Response Future对象,FutureAdapter是一个适配器,用于将Dubbo中的ResponseFuture与JDK中的Future进行适配,这样当用户线程调用Future的get方法时,经过FutureAdapter适配,最终 会调用ResponseFuture实现类对象的get方法,也就是DefaultFuture的get方法;

过程4、5,消费端先从线程上下文中拿到Future对象,再通过Future对象的get的方法获 取结果,但要注意,这个get方法是阻塞的,需要等到服务端结果返回才能获取到数据,此时 就要通过FutureFilter这个过滤器来唤醒这个阻塞的get方法。实现过程如下:

过程6、7,这个过滤器有一个异步回调委托方法,可以直接获取ResponseFuture对象; ResponseFuture是一个接口,其中定义了设置回调方法,如果有response返回,直接调用 isDone方法,否则一直请求回调直到有response返回,表示服务端已完成消费端请求,将结 果数据放入Future对象并唤醒过程5阻塞的get方法直接从Future对象中获取结果数据。

以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉 本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同 的变形或替换均包含在本申请权利要求所限定的范围内。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的单元及 算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件 还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。

专业技术人员可以对每个特定的应用来使用不同的方法来实现所描述的功能,但是这种 实现不应认为超出本发明的范围。以上所述,仅为本发明的具体实施方式,但本发明的保护 范围并不局限于此,任何熟悉技术领域的人员在本发明揭露的技术范围内,可轻易想到变化 或者替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保 护范围为准。

相关技术
  • 一种基于Dubbo的泛化异步调用方法及装置
  • 一种Dubbo泛化接口调用方法及装置
技术分类

06120112213138