远程服务调用方法、系统、计算机设备及存储介质与流程

文档序号:29810393发布日期:2022-04-27 04:04阅读:106来源:国知局
远程服务调用方法、系统、计算机设备及存储介质与流程

1.本技术涉及网络通信技术领域,特别是涉及远程服务调用方法、系统、计算机设备及存储介质。


背景技术:

2.grpc是google发布的基于http 2.0传输层协议承载的高性能开源软件框架,用于在服务之间进行高性能通信。grpc遵守服务端/客户端通信模型,使用时客户端可以像使用本地方法一样调用服务端提供的服务。grpc的客户端通过protobuf作为接口定义语言,来描述服务接口和有效载荷消息结构。其网络通信过程为:编写proto文件,在客户端与服务端之间建立grpc通道,通过grpc协议向服务端发送请求消息;服务端收到请求消息后,会通过protobuf解译proto文件,还原出原先定义好格式的数据结构,进行业务处理;业务处理完成后,服务端使用protobuf重编译应答数据,通过grpc协议向客户端发送应答消息。
3.不管是grpc的客户端还是服务端,在进行远程服务调用和响应的过程中,其服务调用、服务启停以及处理响应等流程步骤都比较繁琐,需要开发人员进行大量代码编写以完成服务配置和数据处理,效率低下。此外,使用protobuf定义服务,通常都需要定义对应的idl(interface description language),然后使用不同语言的idl编译器,生成序列化工具类。每一次有新的grpc服务接口需要开发,都需要编写新的idl也就是编写proto文件并重新编译。编写和编译proto文件比较繁琐,降低开发人员的效率。
4.针对相关技术中存在的基于grpc进行远程服务调用的过程效率低下的问题,目前还没有提出有效的解决方案。


技术实现要素:

5.在本实施例中提供了一种远程服务调用方法、系统、计算机设备及存储介质,以解决相关技术中存在的通过grpc进行远程服务调用的过程效率低下的的问题。
6.第一个方面,在本实施例中提供了一种远程服务调用方法,用于服务系统,所述服务系统包括公共接口层以及依赖所述公共接口层的请求端和响应端,所述方法包括:
7.所述公共接口层、请求端和响应端分别引入远程服务调用组件;所述远程服务调用组件包括服务注解和参数配置;
8.所述请求端基于服务需求在所述公共接口层中获取与所述服务需求对应的接口;通过所述远程服务调用组件在所述接口上声明服务注解,所述服务注解包括与所述服务需求对应的服务名称和请求信息的序列化方式;
9.所述请求端和所述响应端基于所述远程服务调用组件对所述服务名称对应的服务进行参数配置;
10.基于所述服务系统启动grpc的客户端与服务端,并基于所述参数配置自动完成所述客户端与服务端的初始化;所述客户端在初始化过程中生成与所述接口对应的接口代理类;
11.所述客户端基于所述接口代理类进行远程服务调用,所述服务端响应所述远程服务调用并执行所述服务,将对应的执行结果传输给所述客户端。
12.在其中的一些实施例中,所述客户端基于所述接口代理类进行远程服务调用,所述服务端响应所述远程服务调用并执行所述服务,将对应的执行结果传输给所述客户端包括:
13.所述客户端通过调用所述接口代理类发起远程调用请求;所述远程调用请求包括所述服务注解声明的序列化方式、请求信息;
14.服务端基于grpc通信连接接收到所述远程调用请求,获得所述序列化方式并反序列化所述请求信息;
15.所述服务端基于所述请求信息获得执行结果;
16.所述服务端基于所述序列化方式将所述执行结果序列化,基于所述grpc通信连接将序列化后的所述执行结果传输给所述客户端,所述客户端接收并进行反序列化获得所述执行结果。
17.在其中的一些实施例中,所述远程调用请求为所述远程服务调用组件定义的通用请求文件,所述通用请求文件包括数据头和第一消息体,所述数据头用于存放所述序列化方式,所述第一消息体用于存放所述请求信息,所述请求信息包括序列化后的接口名、方法名和方法执行参数。
18.在其中的一些实施例中,所述请求端和所述响应端基于所述远程服务调用组件对所述服务名称对应的服务进行参数配置包括:
19.所述请求端基于所述远程服务调用组件生成请求端配置文件,对所述服务名称对应的ip端口或dns域名进行配置;所述响应端基于所述远程服务调用组件生成响应端配置文件,对服务端口和启动开关进行配置。
20.在其中的一些实施例中,所述基于所述服务系统启动grpc的客户端与服务端,并基于所述参数配置自动完成所述客户端与服务端的初始化包括:
21.所述请求端基于所述请求端配置文件生成grpc的客户端,并将与所述接口对应的代理类实例注册到spring容器中;
22.所述响应端基于所述响应端配置文件启动对应端口的grpc服务,生成服务端,将与所述接口对应的实现类实例注册到spring容器中。
23.在其中的一些实施例中,所述服务端基于所述请求信息获得执行结果包括:
24.所述服务端反序列化所述请求信息,获得待执行的接口名、方法名与方法执行参数;
25.所述服务端通过所述接口名在spring容器中获得对应的实现类实例,调用所述实现类中与所述方法名对应的方法并传入所述方法执行参数,获得执行结果。
26.在其中的一些实施例中,所述服务端基于所述grpc通信连接将序列化后的所述执行结果传输给所述客户端包括:
27.所述服务端将序列化后的所述执行结果生成响应信息,所述响应信息为所述远程服务调用组件定义的通用响应文件,所述通用响应文件包括第二消息体,所述第二消息体用于存放所述响应信息。
28.第二个方面,在本实施例中提供了一种远程服务调用系统装置,所述装置包括:
29.公共接口层,用于引入远程服务调用组件;
30.请求端,用于引入远程服务调用组件,基于服务需求在所述公共接口层中获取与所述服务需求对应的接口;通过所述远程服务调用组件在所述接口上声明服务注解,所述服务注解包括与所述服务需求对应的服务名称和请求信息的序列化方式;基于所述远程服务调用组件对所述服务名称对应的服务进行参数配置,基于服务系统启动grpc的客户端;
31.响应端,用于引入远程服务调用组件,基于所述远程服务调用组件对所述服务名称对应的服务进行参数配置,基于服务系统启动grpc的服务端;
32.客户端,用于基于所述参数配置自动完成所述客户端的初始化,在初始化过程中生成与所述接口对应的接口代理类,基于所述接口代理类进行远程服务调用;
33.服务端,用于基于所述参数配置自动完成所述服务端的初始化,响应所述远程服务调用并执行所述服务,将对应的执行结果传输给所述客户端。
34.第三个方面,在本实施例中提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一个方面所述的远程服务调用方法。
35.第四个方面,在本实施例中提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一个方面所述的远程服务调用方法。
36.与相关技术相比,在本实施例中提供的远程服务调用方法,通过在公共接口层、请求端和响应端分别引入远程服务调用组件,使请求端和响应端具备在公共接口层中进行服务注解、参数配置的功能;请求端与响应端对公共接口层中用于满足服务需求的接口进行注解,对该接口对应的服务通过外部配置文件进行参数配置,屏蔽了grpc底层参数配置与初始化的代码编写;请求端和响应端基于该参数配置进行客户端与服务端的启动和初始化,并建立两者之间的grpc通信连接;客户端在初始化过程中自动生成与该接口对应的接口代理类,通过调用接口代理类完成远程服务调用,代理类自动发送调用请求并获取服务端的执行结果,使用者无需关注该远程服务调用发送请求和获得结果的底层执行过程。本实施例中提供的远程服务调用方法将grpc的远程调用过程进行封装,开发者只需对服务接口进行注解和配置,无需进行调用代码的编写即可实现grpc的远程服务调用,解决了基于grpc进行远程服务调用的过程效率低下的问题,提高了grpc远程服务调用的开发效率。
37.本技术的一个或多个实施例的细节在以下附图和描述中提出,以使本技术的其他特征、目的和优点更加简明易懂。
附图说明
38.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
39.图1是本实施例的远程服务调用方法的应用系统示意图;
40.图2是本实施例的远程服务调用方法的流程图;
41.图3是本实施例的客户端与服务端之间远程服务调用的方法流程图;
42.图4是本优选实施例的远程服务调用方法的流程图;
43.图5是本实施例的远程服务调用系统结构示意图。
具体实施方式
44.为更清楚地理解本技术的目的、技术方案和优点,下面结合附图和实施例,对本技术进行了描述和说明。
45.除另作定义外,本技术所涉及的技术术语或者科学术语应具有本技术所属技术领域具备一般技能的人所理解的一般含义。在本技术中的“一”、“一个”、“一种”、“该”、“这些”等类似的词并不表示数量上的限制,它们可以是单数或者复数。在本技术中所涉及的术语“包括”、“包含”、“具有”及其任何变体,其目的是涵盖不排他的包含;例如,包含一系列步骤或模块(单元)的过程、方法和系统、产品或设备并未限定于列出的步骤或模块(单元),而可包括未列出的步骤或模块(单元),或者可包括这些过程、方法、产品或设备固有的其他步骤或模块(单元)。在本技术中所涉及的“连接”、“相连”、“耦接”等类似的词语并不限定于物理的或机械连接,而可以包括电气连接,无论是直接连接还是间接连接。在本技术中所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。通常情况下,字符“/”表示前后关联的对象是一种“或”的关系。在本技术中所涉及的术语“第一”、“第二”、“第三”等,只是对相似对象进行区分,并不代表针对对象的特定排序。
46.在本实施例中提供的远程服务调用方法实施例可以应用于如图1所示的应用环境中。其中,请求端102、响应端104可以通过网络进行通信,请求端102与响应端104的数量都没有限制。其中,请求端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务端104可以但不限于是各种服务器、服务器集群、主机、工作站等,公共接口层106部署在请求端102和响应端104上。本技术实施例提供的远程服务调用方法可以在请求端102和响应端104执行,请求端102和响应端104可以包括一个或多个处理器和用于存储数据的存储器,其中,处理器可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置。存储器可用于存储计算机程序,例如,应用软件的软件程序以及模块,如在本实施例中的远程服务调用方法对应的计算机程序,处理器通过运行存储在存储器内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实施例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限制。例如,请求端102和响应端104还可包括比图1中所示更多或者更少的组件,或者具有与图1所示出的不同配置。
47.在本实施例中提供了一种远程服务调用方法,用于服务系统,该服务系统包括公共接口层以及依赖该公共接口层的请求端和响应端。图2是本实施例的远程服务调用方法的流程图。本实施例为请求端与响应端在服务系统中通过该方法完成远程调用服务的过程。如图2所示,该流程包括如下步骤:
48.步骤201,公共接口层、请求端和响应端分别引入远程服务调用组件;该远程服务调用组件包括服务注解和参数配置。
49.本实施例中的公共接口层是请求端和响应端共同依赖的接口集合。请求端和响应端可以利用公共接口层的已有接口满足自身需求,减少本地的代码编写工作。接口中规定
了要实现的功能,每一个接口都对应一个服务,该服务中给出了实现该功能的具体方法。因此,请求端或响应端要实现一个具体的功能,不仅需要找到该功能对应的接口,还需要运行该接口对应的服务获得相应的结果才能实现该功能。当该服务不在本地时,需要通过grpc来进行远程调用,即请求端发送一个远程服务调用请求,响应端接收该请求并运行对应的服务,将运行后的结果发回请求端。这一过程由于涉及服务调用和网络通信,需要进行多次代码编写以完成参数配置和数据传输,且中间执行步骤较为复杂。本实施例中的远程服务调用组件是对grpc远程调用服务过程中的部分方法步骤进行封装,当公共接口层、请求端和响应端引入该远程服务调用组件时,就可以利用该组件完成对应的功能。在本实施例中,该远程服务调用组件包括服务注解和参数配置,因此请求端和响应端具备在公共接口层中通过该远程服务调用组件进行服务注解和参数配置的功能。
50.步骤202,请求端基于服务需求在公共接口层中获取与服务需求对应的接口;通过远程服务调用组件在该接口上声明服务注解,该服务注解包括与服务需求对应的服务名称和请求信息的序列化方式。
51.请求端产生服务需求后,可以在依赖的公共接口层中找到与该服务需求相对应的接口,该接口的功能可以满足请求端的服务需求。找到该接口后,请求端可以通过服务注解的方式识别该接口,便于后续客户端初始化过程中对该接口生成对应的代理类并进行调用。另外,由于该接口对应的服务在远端,请求端需要通过网络通信的方式向对应的响应端发送调用请求,因此,请求端需要先把与该服务有关的信息进行序列化处理以后再传输。为了让响应端顺利识别该信息,请求端还需要在服务注解中说明序列化方式,以及与该服务需求对应的服务名称,以便响应端找到对应的服务。
52.步骤203,请求端和响应端基于远程服务调用组件对该服务名称对应的服务进行参数配置。
53.参数配置功能也是基于远程服务调用组件实现的,远程服务调用组件包括配置文件。请求端和响应端都可以通过配置文件对需要调用的服务进行参数配置。其中,请求端在步骤202中已经确定了需要调用的服务名称,在本步骤中请求端将该服务名称写入配置文件中的服务列表,并对服务列表中的服务进行参数配置,为后续构建grpc通信连接,生成grpc客户端做准备。响应端则可以在配置文件中对被调用服务进行参数配置。
54.步骤204,基于服务系统启动grpc的客户端与服务端,并基于该参数配置自动完成客户端与服务端的初始化;客户端在初始化过程中生成与该接口对应的接口代理类。
55.请求端完成参数配置后,启动grpc客户端,开始进行程序初始化。在程序初始化过程中,请求端加载远程服务调用组件中对应的自动装配类,自动装配类根据参数配置完成客户端的初始化,包括生成grpc底层连接,并对步骤202中被注解的接口进行扫描,生成对应的接口代理类。响应端同样在完成参数配置后,启动grpc服务端,开始进行程序初始化。在程序初始化过程中,响应端也可以加载远程服务调用组件中对应的自动装配类,自动装配类根据响应端的参数配置完成服务端的初始化。客户端与服务端初始化完成后,grpc通信连接建立,可以开始远程服务调用过程。
56.步骤205,客户端基于该接口代理类进行远程服务调用,服务端响应该远程服务调用并执行该服务,将对应的执行结果传输给客户端。
57.客户端基于生成的接口代理类,将需要调用的服务信息通过已建立的grpc通信连
接发送给服务端,服务端接收到该服务信息后,根据该服务信息找到对应的服务并执行,将执行结果通过该grpc通信连接返回给客户端,完成一次远程服务调用过程。
58.通过上述步骤s201至s205,在本实施例中提供的远程服务调用方法,通过在公共接口层、请求端和响应端分别引入远程服务调用组件,使请求端和响应端具备在公共接口层中进行服务注解、参数配置的功能;请求端与响应端对公共接口层中用于满足服务需求的接口进行注解,对该接口对应的服务通过外部配置文件进行参数配置,屏蔽了grpc底层参数配置与初始化的代码编写;通过共同依赖和服务注解,可以解耦请求端与响应端,通过公共接口层来维护两者之间的调用关系;请求端和响应端基于该参数配置进行客户端与服务端的启动和初始化,并建立两者之间的grpc通信连接;客户端在初始化过程中自动生成与该接口对应的接口代理类,通过调用接口代理类完成远程服务调用,代理类自动发送调用请求并获取服务端的执行结果,使用者无需关注该远程服务调用发送请求和获得结果的底层执行过程。本实施例中提供的远程服务调用方法将grpc的远程调用过程进行封装,开发者只需对服务接口进行注解和配置,无需进行调用代码的编写即可实现grpc的远程服务调用,解决了基于grpc进行远程服务调用的过程效率低下的问题,提高了grpc远程服务调用的开发效率。
59.在其中的一些实施例中,涉及grpc通信连接建立以后,客户端基于接口代理类进行远程服务调用,服务端响应该远程服务调用并执行相应的服务,将对应的执行结果传输给客户端的过程。图3是本实施例的客户端与服务端之间远程服务调用方法的流程图。如图3所示,该过程包括如下步骤:
60.s301,客户端通过调用接口代理类发起远程调用请求;该远程调用请求包括服务注解声明的序列化方式、请求信息。
61.接口代理类是在客户端初始化过程中自动生成的,与被注解的接口一一对应。客户端调用该接口代理类即可发起远程调用请求。在整个调用过程中,调用请求的底层逻辑对客户端透明。该接口代理类中包含代理方法,通过执行代理方法发起远程调用。通过执行代理方法,获得要调用的服务信息,并通过服务注解声明的序列化方式,将该信息序列化为请求信息,该请求信息可以为二进制数据。将序列化方式和请求信息放入远程调用请求中发送给服务端。
62.s302,服务端基于grpc通信连接接收到该远程调用请求,获得序列化方式并反序列化请求信息。
63.服务端基于grpc通信连接接收到该远程调用请求,获得序列化方式,根据该序列化方式反序列化请求信息,得到客户端需要调用的服务信息。这里的序列化和反序列化是指将请求信息中的各种参数通过一种预先约定的格式进行编译和解译的过程。例如,客户端指定的序列化方式为json,则请求信息是按照json格式排列的一串字符串,服务端接收到该字符串以后,按照json格式对请求信息解译,得到服务信息中的各种参数名和参数值,然后根据这些信息执行对应的服务。本实施例中的序列化方式可以为hessian、protostuff或json。
64.s303,服务端基于该请求信息获得执行结果。
65.s304,服务端基于该序列化方式将执行结果序列化,基于grpc通信连接将序列化后的执行结果传输给客户端,客户端接收并进行反序列化获得该执行结果。
66.服务端被调用服务的执行结果同样包括各种参数名和参数值等信息,将执行结果回传给客户端也需要进行序列化,但此时不需要重新规定序列化方式,而是使用与请求信息同样的序列化方式将执行结果序列化,然后发送给客户端。客户端通过该grpc通信连接接收到序列化后的执行结果,再进行反序列化,获得执行结果。
67.通过上述步骤s301至s304,在本实施例中提供的客户端与服务端之间的远程服务调用方法,客户端只需要通过调用接口代理类发起远程调用请求,不需要关注grpc的底层实现逻辑,屏蔽了远程服务调用的实现代码;在客户端传输远程调用请求的过程中约定序列化方式,使得客户端与服务端可以基于同样的格式获取远程调用请求和执行结果,完成调用参数的传输。
68.在其中的一些实施例中,远程调用请求为远程服务调用组件定义的通用请求文件,该通用请求文件包括数据头和第一消息体,数据头用于存放序列化方式,第一消息体用于存放请求信息,请求信息包括序列化后的接口名、方法名和方法执行参数。
69.在grpc通信系统中,可以使用一种通用的请求格式来定义远程调用请求。这种通用的请求格式是远程服务调用组件提供的,客户端和服务端可以利用该组件生成该远程调用请求。通用请求格式包括数据头和第一消息体两个字段,数据头字段用于存放序列化方式,第一消息体字段为字节类型,用于存放请求信息,请求信息是已经完成序列化的接口名、方法名和方法执行参数。将请求信息依照该通用请求格式发送给服务端,服务端可以完成反序列化并获得执行该服务所需的信息。该通用请求格式适用于所有远程调用请求,并可以代替proto文件完成接口的定义。
70.在本实施例中提供的通用请求文件,提供了一种通用的请求格式对远程调用请求进行封装,避免了定义新的服务时proto文件的编写和编译,提高了开发效率。
71.在其中的一些实施例中,涉及请求端和响应端基于远程服务调用组件对服务名称对应的服务进行参数配置的方法,该方法包括:
72.请求端基于远程服务调用组件生成请求端配置文件,对服务名称对应的ip端口或dns域名进行配置;响应端基于远程服务调用组件生成响应端配置文件,对服务端口和启动开关进行配置。
73.请求端与响应端针对要调用的服务进行配置,为建立grpc通信连接做准备。请求端配置要调用服务对应的ip端口或dns域名,以确认该服务的地址和通信端口;响应端配置服务启动开关和启动端口,同一个服务在请求端和响应端的端口配置应该一致。开启服务启动开关后,响应端即可对请求端的调用请求启动服务调用。
74.在本实施例中提供的请求端和响应端基于远程服务调用组件对服务名称对应的服务进行参数配置的方法,提供了客户端和服务端建立grpc连接的必要条件,为后续步骤的客户端和服务端的启动和初始化做准备。
75.在其中的一些实施例中,基于服务系统启动grpc的客户端与服务端,并基于参数配置自动完成客户端与服务端的初始化包括:
76.请求端基于请求端配置文件生成grpc的客户端,并将与该接口对应的代理类实例注册到spring容器中;响应端基于响应端配置文件启动对应端口的grpc服务,生成服务端,将与该接口对应的实现类实例注册到spring容器中。
77.在启动grpc的客户端与服务端过程中,客户端和服务端通过自动装配类完成各自
程序的初始化,包括生成grpc底层连接,以及客户端的自动装配类会对被注解的接口进行扫描,生成对应的接口代理类。初始化过程中,客户端还将与该接口对应的代理类实例注册到spring容器中,服务端将与该接口对应的实现类实例注册到spring容器中,以便后续在处理调用请求时从spring容器中获取对应的代理类实例和实现类实例,完成方法的执行,获取执行结果。
78.在本实施例中提供的grpc的客户端和服务端启动和初始化方法,给出了客户端和服务端的生成和启动方式,将与调用接口对应的代理类实例和实现类实例注册到spring容器供后续调用,给出了服务在远端运行的可执行方式。
79.在其中的一些实施例中,涉及服务端基于请求信息获得执行结果的具体过程。具体方法包括:
80.服务端反序列化请求信息,获得待执行的接口名、方法名与方法执行参数;服务端通过接口名在spring容器中获得对应的实现类实例,调用实现类中与该方法名对应的方法并传入方法执行参数,获得执行结果。
81.客户端向服务端发送远程调用请求,该远程调用请求中包括请求的序列化方式和具体的请求信息,该请求信息传输到服务端后进行反序列化,获得客户端需要调用服务的真实信息,包括对应的接口名、接口中需要执行的方法名、以及在执行方法过程中需要使用的执行参数。服务端根据该接口名在spring容器中获得对应的实现类实例,该实现类实例为该接口对应的可执行的方法的集合。服务端从该实现类实例中调用需要执行的方法名对应的方法,并将方法执行参数传递到方法中,运行方法获得执行结果。
82.本实施例中的服务端基于请求信息获得执行结果的方法,通过反序列化获得待执行的接口、方法名称和参数信息,从而完成服务的运行并获取执行结果,为服务端被调用的服务运行提供了具体的实施步骤,获得了关键的执行结果信息。
83.在其中的一些实施例中,还涉及响应信息的传输格式。服务端基于grpc通信连接将序列化后的执行结果传输给客户端包括:
84.服务端将序列化后的执行结果生成响应信息,响应信息为远程服务调用组件定义的通用响应文件,该通用响应文件包括第二消息体,第二消息体用于存放响应信息。
85.与远程调用请求的通用请求格式类似,响应信息也可以使用通用的响应格式来传递。该通用的响应格式也是远程服务调用组件提供的,客户端和服务端可以利用该组件生成该响应信息。通用响应格式只包括第二消息体一个字段,不需要包括序列化方式字段。第二消息体为字节类型,用于存放响应信息,响应信息是已经完成序列化的执行结果,可以是方法执行后输出的参数名和参数值。
86.在本实施例中提供的通用响应文件,提供了一种通用的响应格式对响应信息进行封装,避免了proto文件的编写和编译,提高了开发效率。
87.下面通过优选实施例对本实施例进行描述和说明。
88.图4是本优选实施例的远程服务调用方法流程图。如图4所示,该方法包括如下步骤:
89.步骤s401,公共接口层、请求端和响应端分别引入远程服务调用组件;远程服务调用组件包括服务注解和参数配置;
90.本优选实施例中公共接口层、请求端和响应端引入远程服务调用组件的方式为
maven依赖。
91.步骤s402,请求端基于服务需求在公共接口层中获取与服务需求对应的接口;通过远程服务调用组件在接口上声明服务注解,服务注解包括与服务需求对应的服务名称和请求信息的序列化方式;
92.步骤s403,请求端基于远程服务调用组件生成请求端配置文件,对服务名称对应的ip端口或dns域名进行配置;响应端基于远程服务调用组件生成响应端配置文件,对服务端口和启动开关进行配置;
93.本优选实施例中的远程服务调用组件自带grpc的dns域名负载均衡功能,无需注册中心也可实现动态负载均衡。
94.步骤s404,请求端基于请求端配置文件生成grpc的客户端,客户端在初始化过程中生成与接口对应的接口代理类;并将与接口对应的代理类实例注册到spring容器中;响应端基于响应端配置文件启动对应端口的grpc服务,生成服务端,将与接口对应的实现类实例注册到spring容器中;
95.spring容器是spring开源框架的一个组件,专门用于存放javabean实例。在容器启动过程中,会将指定的bean实例化并放入容器中,由spring容器来管理这些bean的生命周期以及后续的使用,在此基础上实现ioc(控制反转)与依赖注入,从而解决了java类与类之间的耦合问题。springboot自动装配是springboot框架的重要特性之一,利用专门的spi机制,在容器启动时扫描并自动注册一些事先约定好的bean实例,基于约定优于配置的思想,减少了软件开发人员的开发量以及繁琐的配置项。
96.本优选实施例中的服务端与客户端均为spring应用,基于springboot自动装配特性完成初始化。在spring应用启动期间加载spring.factories所配置的自动装配类grpcautoconfiguration,根据上一步骤s403中对应的配置参数,完成服务端与客户端的初始化工作。
97.步骤s405,客户端通过调用接口代理类发起远程调用请求;远程调用请求包括服务注解声明的序列化方式、请求信息;远程调用请求为远程服务调用组件定义的通用请求文件;
98.本优选实施例中的接口代理类执行底层的远程调用逻辑,利用grpcclient发起请求。
99.步骤s406,服务端基于grpc通信连接接收到远程调用请求,获得序列化方式并反序列化请求信息,获得待执行的接口名、方法名与方法执行参数;
100.步骤s407,服务端通过接口名在spring容器中获得对应的实现类实例,调用实现类中与方法名对应的方法并传入方法执行参数,获得执行结果;
101.步骤s408,服务端基于序列化方式将执行结果序列化,生成响应信息传输给客户端,该响应信息为远程服务调用组件定义的通用响应文件;
102.步骤s409,客户端接收并进行反序列化获得执行结果。
103.通过上述步骤s401至s409,在本优选实施例中提供的远程服务调用方法,通过在公共接口层、请求端和响应端分别引入远程服务调用组件,使请求端和响应端具备在公共接口层中进行服务注解、参数配置,以及通过通用请求文件和通用响应文件定义调用请求和响应信息的功能;请求端与响应端通过对接口注解,对服务进行参数配置,屏蔽了grpc底
层参数配置与初始化的代码编写;客户端基于远程服务调用组件自动生成接口代理类完成远程服务调用,使用者无需关注该远程服务调用发送请求和获得结果的底层执行过程。本实施例中提供的远程服务调用方法将grpc的远程调用过程进行封装,开发者只需对服务接口进行注解和配置,无需进行调用代码的编写即可实现grpc的远程服务调用,解决了基于grpc进行远程服务调用的过程效率低下的问题,提高了grpc远程服务调用的开发效率。
104.需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
105.在一些实施例中,本技术还提供了一种远程服务调用系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。以下所使用的术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管在以下实施例中所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
106.图5是本实施例的远程服务调用系统的结构框图,如图5所示,该系统包括:公共接口层51、请求端52、响应端53、客户端54和服务端55。其中,请求端52和客户端54在物理上同属于一个设备;响应端53和服务端55在物理上同属于一个设备。
107.公共接口层51,用于引入远程服务调用组件。
108.请求端52,用于引入远程服务调用组件,基于服务需求在公共接口层中获取与服务需求对应的接口;通过远程服务调用组件在接口上声明服务注解,服务注解包括与服务需求对应的服务名称和请求信息的序列化方式;基于远程服务调用组件对服务名称对应的服务进行参数配置,基于服务系统启动grpc的客户端。
109.响应端53,用于引入远程服务调用组件,基于远程服务调用组件对服务名称对应的服务进行参数配置,基于服务系统启动grpc的服务端。
110.客户端54,用于基于参数配置自动完成客户端的初始化,在初始化过程中生成与接口对应的接口代理类,基于接口代理类进行远程服务调用。
111.服务端55,用于基于参数配置自动完成服务端的初始化,响应远程服务调用并执行服务,将对应的执行结果传输给客户端。
112.本实施例中的远程服务调用系统,通过在公共接口层、请求端和响应端分别引入远程服务调用组件,使请求端和响应端具备在公共接口层中进行服务注解、参数配置的功能;请求端与响应端对公共接口层中用于满足服务需求的接口进行注解,对该接口对应的服务通过外部配置文件进行参数配置,屏蔽了grpc底层参数配置与初始化的代码编写;请求端和响应端基于该参数配置进行客户端与服务端的启动和初始化,并建立两者之间的grpc通信连接;客户端在初始化过程中自动生成与该接口对应的接口代理类,通过调用接口代理类完成远程服务调用,代理类自动发送调用请求并获取服务端的执行结果,使用者无需关注该远程服务调用发送请求和获得结果的底层执行过程。本实施例中提供的远程服务调用方法将grpc的远程调用过程进行封装,开发者只需对服务接口进行注解和配置,无需进行调用代码的编写即可实现grpc的远程服务调用,解决了基于grpc进行远程服务调用的过程效率低下的问题,提高了grpc远程服务调用的开发效率。
113.需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位
于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。
114.在本实施例中还提供了一种计算机设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
115.可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
116.需要说明的是,在本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,在本实施例中不再赘述。
117.此外,结合上述实施例中提供的远程服务调用方法,在本实施例中还可以提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种远程服务调用方法。
118.应该明白的是,这里描述的具体实施例只是用来解释这个应用,而不是用来对它进行限定。根据本技术提供的实施例,本领域普通技术人员在不进行创造性劳动的情况下得到的所有其它实施例,均属本技术保护范围。
119.显然,附图只是本技术的一些例子或实施例,对本领域的普通技术人员来说,也可以根据这些附图将本技术适用于其他类似情况,但无需付出创造性劳动。另外,可以理解的是,尽管在此开发过程中所做的工作可能是复杂和漫长的,但是,对于本领域的普通技术人员来说,根据本技术披露的技术内容进行的某些设计、制造或生产等更改仅是常规的技术手段,不应被视为本技术公开的内容不足。
[0120]“实施例”一词在本技术中指的是结合实施例描述的具体特征、结构或特性可以包括在本技术的至少一个实施例中。该短语出现在说明书中的各个位置并不一定意味着相同的实施例,也不意味着与其它实施例相互排斥而具有独立性或可供选择。本领域的普通技术人员能够清楚或隐含地理解的是,本技术中描述的实施例在没有冲突的情况下,可以与其它实施例结合。
[0121]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对专利保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1