一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

不同部署场景的远程调用方法、装置、设备及存储介质与流程

2022-02-22 20:34:06 来源:中国专利 TAG:

1.本发明涉及计算机技术领域,尤其涉及不同部署场景的远程调用方法、装置、设备及存储介质。


背景技术:

2.java应用基于平台sdk(software development kit,软件开发工具包)提供给业务开发,在进行服务部署时,根据不同的业务场景有不同的部署模式。比如大客户,需要应用将业务单元进行微服务部署,即分离部署。而小客户不需要拆分很多服务进行部署,希望将多个业务单元在一个容器中打包整体部署和运行,即集中部署。目前在进行业务开发时,在不同业务单元之间相互调用,根据集中部署和分离部署的不同场景需要采用不同的调用方式。在分离部署时,直接通过io远程调用即可,但在集中部署时,无法直接使用远程调用方法,需要进行代码的修改才能完成本地业务单元之间的调用。因此,目前在不同的部署场景下无法统一使用远程调用方法,存在维护成本高的问题。


技术实现要素:

3.本发明的主要目的在于提供一种不同部署场景的远程调用方法、装置、设备及计算机可读存储介质,旨在解决在不同的部署场景下无法统一使用远程调用方法,存在维护成本高的问题。
4.为实现上述目的,本发明提供一种不同部署场景的远程调用方法,所述不同部署场景的远程调用方法包括以下步骤:在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口;根据所述待调用接口,获取与所述待调用接口相对应的目标动态代理实现类;根据所述目标动态代理实现类,动态执行代理流程,以完成所述远程调用服务。
5.可选地,所述在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口步骤之前,还包括:在接收到远程调用客户端注册请求时,使用spring boot启动内置服务容器undertow;当进行所述内置服务容器undertow初始化时,通过后置处理器bean definition registry post processor进行所述远程调用客户端的注册。
6.可选地,所述通过后置处理器bean definition registry post processor进行所述远程调用客户端的注册步骤之后,包括:使用class path scanning candidate component provider扫描出所有待注册的远程服务接口类,其中,所述远程服务接口类为通过注解获取到的用户定义的服务接口类;使用invocation handler对所述远程服务接口类生成对应的动态代理实现类;对生成的所述动态代理实现类进行实例化。
7.可选地,所述对生成的所述动态代理类进行实例化步骤,包括:通过所述远程调用客户端调用所述动态代理类实现具体远程调用逻辑,以得到动态代理实例;使用factory bean将所述动态代理实例注册为spring容器组件。
8.可选地,所述动态执行代理流程,以完成所述远程调用服务步骤,包括:在执行所述代理流程时,通过executor select strategy 使用 request mapping handler mapping ,获取请求地址以判断本地是否存在请求的目标方法;若存在,则直接调用本地方法栈,以完成所述远程调用服务。
9.可选地,所述直接调用本地方法栈,以完成所述远程调用服务步骤,包括:通过local executor使用请求路径,匹配查找本地方法;通过reflect反射执行所述本地方法,并接受返回值,以完成所述远程调用服务。
10.可选地,所述获取请求地址以判断本地是否存在请求的目标方法步骤之后,还包括:若不存在,则执行远程方法,通过 feign 执行 http 请求远程服务;使用json对远程服务响应结果进行拆箱解析处理,以完成所述远程调用服务此外,为实现上述目的,本发明还提供一种基于不同部署场景的远程调用装置,所述装置包括:接收模块,用于在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口;获取模块,用于根据所述待调用接口,获取与所述待调用接口相对应的目标动态代理实现类;执行模块,用于根据所述目标动态代理实现类,动态执行代理流程,以完成所述远程调用服务。
11.可选地,所述执行模块还用于:在执行所述代理流程时,通过executor select strategy使用request mapping handler mapping,获取请求地址以判断本地是否存在请求的目标方法;若存在,则直接调用本地方法栈,以完成所述远程调用服务。
12.可选地,所述执行模块还用于:通过local executor使用请求路径,匹配查找本地方法;通过reflect反射执行所述本地方法,并接受返回值,以完成所述远程调用服务。
13.可选地,所述执行模块还用于:若不存在,则执行远程方法,通过 feign 执行 http 请求远程服务;使用json对远程服务响应结果进行拆箱解析处理,以完成所述远程调用服务。
14.可选地,所述装置还包括:注册模块,用于在接收到远程调用客户端注册请求时,使用spring boot启动内置服务容器undertow;当进行所述内置服务容器undertow初始化时,通过后置处理器bean definition registry post processor进行所述远程调用客户端的注册。
15.可选地,所述注册模块还用于:
使用class path scanning candidate component provider扫描出所有待注册的远程服务接口类,其中,所述远程服务接口类为通过注解获取到的用户定义的服务接口类;使用invocation handler对所述远程服务接口类生成对应的动态代理实现类;对生成的所述动态代理实现类进行实例化。
16.可选地,所述注册模块还用于:通过所述远程调用客户端调用所述动态代理类实现具体远程调用逻辑,以得到动态代理实例;使用factory bean将所述动态代理实例注册为spring容器组件。
17.本发明还提供一种基于不同部署场景的远程调用设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于不同部署场景的远程调用程序,所述基于不同部署场景的远程调用程序配置为实现如上述的不同部署场景的远程调用方法步骤。
18.本发明还提供一种存储介质,所述存储介质上存储有基于不同部署场景的远程调用程序,所述基于不同部署场景的远程调用程序被处理器执行时实现如上述的不同部署场景的远程调用方法的步骤。
19.本发明通过在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口;根据所述待调用接口,获取与所述待调用接口相对应的目标动态代理实现类;根据所述目标动态代理实现类,动态执行代理流程,以完成所述远程调用服务。解决了在不同的部署场景下无法统一使用远程调用方法,存在维护成本高的问题。使得在不同的部署场景下,即在集中部署和分离部署两种场景下,能够使用统一的调用方法实现业务单元间的相互调用,而不用在分离部署时进行代码的修改,以实现业务单元间的相互调用。实现了不同部署场景下的调用方法统一,实现了降低维护成本的技术效果。
附图说明
20.图1是本发明实施例方案涉及的硬件运行环境的终端设备的结构示意图;图2是本发明一实施例的流程示意图。
21.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
22.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
23.应当理解,尽管在本文可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本文范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。本技术使用的术语“或”、“和/或”、“包括以下至少一个”等可被解释为包括性的,或意味着任一个或任何组合。
24.应该理解的是,虽然本技术实施例中的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,
这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
25.为了对发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式。
26.参照图1,图1为本发明实施例方案涉及的硬件运行环境的终端设备结构示意图。
27.如图1所示,该终端设备可以包括:处理器1001,例如中央处理器(central processing unit,cpu),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(wireless-fidelity,wi-fi)接口)。存储器1005可以是高速的随机存取存储器(random access memory,ram)存储器,也可以是稳定的非易失性存储器(non-volatile memory,nvm),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
28.本领域技术人员可以理解,图1中示出的结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
29.如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及基于不同部署场景的远程调用程序。
30.在图1所示的终端设备中,网络接口1004主要用于与其他设备进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明终端设备中的处理器1001、存储器1005可以设置在终端设备中,终端设备通过处理器1001调用存储器1005中存储的基于不同部署场景的远程调用程序,并执行以下操作:在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口;根据所述待调用接口,获取与所述待调用接口相对应的目标动态代理实现类;根据所述目标动态代理实现类,动态执行代理流程,以完成所述远程调用服务。
31.进一步地,处理器1001可以用于调用存储器1005中存储的基于不同部署场景的远程调用程序,还执行以下操作:在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口步骤之前,还包括:在接收到远程调用客户端注册请求时,使用spring boot启动内置服务容器undertow;当进行所述内置服务容器undertow初始化时,通过后置处理器bean definition registry post processor进行所述远程调用客户端的注册。
32.进一步地,处理器1001可以用于调用存储器1005中存储的基于不同部署场景的远程调用程序,还执行以下操作:通过后置处理器bean definition registry post processor进行所述远程调用客户端的注册步骤之后,包括:使用class path scanning candidate component provider扫描出所有待注册
的远程服务接口类,其中,所述远程服务接口类为通过注解获取到的用户定义的服务接口类;使用invocation handler对所述远程服务接口类生成对应的动态代理实现类;对生成的所述动态代理实现类进行实例化。
33.进一步地,处理器1001可以用于调用存储器1005中存储的基于不同部署场景的远程调用程序,还执行以下操作:对生成的所述动态代理类进行实例化步骤,包括:通过所述远程调用客户端调用所述动态代理类实现具体远程调用逻辑,以得到动态代理实例;使用factory bean将所述动态代理实例注册为spring容器组件。
34.进一步地,处理器1001可以用于调用存储器1005中存储的基于不同部署场景的远程调用程序,还执行以下操作:动态执行代理流程,以完成所述远程调用服务步骤,包括:在执行所述代理流程时,通过executor select strategy 使用request mapping handler mapping,获取请求地址以判断本地是否存在请求的目标方法;若存在,则直接调用本地方法栈,以完成所述远程调用服务。
35.进一步地,处理器1001可以用于调用存储器1005中存储的基于不同部署场景的远程调用程序,还执行以下操作:直接调用本地方法栈,以完成所述远程调用服务步骤,包括:通过local executor使用请求路径,匹配查找本地方法;通过reflect反射执行所述本地方法,并接受返回值,以完成所述远程调用服务。
36.进一步地,处理器1001可以用于调用存储器1005中存储的基于不同部署场景的远程调用程序,还执行以下操作:获取请求地址以判断本地是否存在请求的目标方法步骤之后,还包括:若不存在,则执行远程方法,通过 feign 执行 http 请求远程服务;使用json对远程服务响应结果进行拆箱解析处理,以完成所述远程调用服务。
37.随着应用的不断开发,一个应用可能包括多个子系统,子系统又分为多个业务单元,这些业务单元可以分别单独部署到一个服务,也可以多个业务单元部署到一个服务,也就是存在集中部署和分离部署两种场景。在分离部署时,直接使用远程调用方法即可实现业务单元间的相互调用;但在集中部署时,由于在一个进程内,因此无法直接使用远程调用方法,需要进行代码的修改才能实现业务单元间的相互调用。即在不同的部署场景下无法统一使用远程调用方法,存在维护成本高的问题。
38.为了解决上述问题,本发明提供了一种不同部署场景的远程调用方法,包括:在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口;根据所述待调用接口,获取与所述待调用接口相对应的目标动态代理实现类;根据所述目标动态代理实现类,动态执行代理流程,以完成所述远程调用服务。本方法通过接收到客户端的远程调用服务请求时,获取客户端声明的待调用接口,从而获取对应的动态代理实现类,动态执行代理流程,以完成远程调用服务。由于在动态代理实现类中封装了具体调用过程,使得使用者不必关注于具体的远程调用逻辑的实现,而在动态执行代理流程中,当部署方式为集中部署
时,执行本地调用方法,当部署方式为分离部署时,执行远程调用方法。本方法可实现不同部署场景下的业务单元之间的调用,实现了不同部署场景下,使用统一的调用方法,降低维护成本的技术效果。
39.本发明实施例提供了一种不同部署场景的远程调用方法,参照图2,图2为本发明不同部署场景的远程调用方法一实施例的流程示意图。
40.本实施例中,所述不同部署场景的远程调用方法包括:步骤s10,在接收到客户端的远程调用服务请求时,获取所述客户端声明的待调用接口。
41.在本实施例中,不同部署场景,是指在进行项目开发的过程中,根据用户的不同需求,对开发出的服务的不同部署方式,包括集中部署和分离部署两种场景。远程调用的英文缩写是rpc(remote procedure call),是一种进程间的通信方式,也就是客户端通过参数传递的方式调用服务器的服务并得到返回的结果,用于不同业务单元之间的相互调用。
42.客户端也称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。
43.客户端的远程调用服务请求是指客户端为了调用不同部署场景下的其它业务单元而发送的调用请求。待调用接口是指客户端在发送调用请求时,需要调用远程服务接口,在使用远程服务接口时,需要先声明接口,所访问路径和服务端提供的路径要一致。
44.为了更好理解,下面是一实施例中声明接口过程的具体代码:@remoteservice(appcode = "0096", businesscode = "00960101", path = "/contract") public interface contractremote { @remoteaction("/fetchcontract") contractdto fetchcontract(@requestbody contractdto contractdto) throws exception; }步骤s20,根据所述待调用接口,获取与所述待调用接口相对应的目标动态代理实现类;在本实施例中,通过 spring 注入的方式使用待调用接口,其中,spring是一个开源框架,用于企业应用程序开发,是一个轻量级的控制反转和面向切面的容器框架。而注入是指,spring的管理机制bean工厂已经提前对象创建好了,用户只需要调用就行。因此,通过注入方式使用待调用接口时,根据接口声明的访问路径,可以获得对应的预先注册好的目标动态代理实现类。其中,动态代理用于远程调用过程封装,从而使得使用者不必关注于具体远程调用逻辑的实现。
45.步骤s30,根据所述目标动态代理实现类,动态执行代理流程,以完成所述远程调用服务。
46.在本实施例中,目标动态代理实现类用于执行远程调用的逻辑处理。根据目标动态代理实现类可获取相对应的spring容器中已经注册好的动态代理实例组件,其中,动态实例组件中封装了具体的调用过程方法。
47.动态执行代理流程是指根据配置获取到当前系统部署模式,动态执行动态代理实例组件中封装的调用方法。其中,提前封装的方法包括:在分离部署模式下的远程调用方法
handler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序。
57.步骤s300,对生成的所述动态代理实现类进行实例化。
58.在本实施例中,实例化是指在面向对象的编程中,用类创建对象的过程。
59.可选地,步骤s300,对生成的所述动态代理实现类进行实例化,包括:步骤s3001,通过所述远程调用客户端调用所述动态代理类实现具体远程调用逻辑,以得到动态代理实例。
60.在本实施例中,远程调用客户端是指在进行内置服务容器undertow初始化时,所注册的远程调用客户端。动态代理实例即为实现了具体调用方法的动态代理实现类。其中,具体的调用方法包括,在分离部署模式下的远程调用方法和集中部署模式下的本地调用方法,用于最终完成远程调用服务。
61.步骤s3002,使用factory bean将所述动态代理实例注册为spring容器组件。
62.在本实施例中,factory bean也是接口,为容器中bean的实现提供了更加灵活的方式,factory bean在容器的基础上给bean的实现加上了一个简单工厂模式和装饰模式。使用factory bean将所述动态代理实例注册为spring容器组件以便于后续调用。
63.本实施例通过在spring进行容器初始化时,进行远程调用客户端的注册,并生成动态代理实现类,使用远程调用客户端调用动态代理类实现具体远程调用逻辑,以得到动态代理实例并封装为组件。实现了在spring容器中,生成动态代理,并提前将具体的调用方法封装在容器组件中,使得用户在使用时直接调用即可,在实现了简化用户操作的技术效果。且在执行时,可以动态执行所封装的不同方法,因此,可实现不同部署场景的远程调用。
64.进一步地,在本发明不同部署场景的远程调用方法的另一实施例中,步骤s30,动态执行代理流程,以完成所述远程调用服务,包括:步骤s31,在执行所述代理流程时,通过executor select strategy使用request mapping handler mapping,获取请求地址以判断本地是否存在请求的目标方法。
65.在本实施例中,request mapping handler mapping 是一个非常便捷的类,它在spring mvc启动时加载,提供一个方法,可以获取所有类中被@request mapping标注过的方法的对象(method对象),用于动态的做一些事情。因此,可以通过通过executor select strategy使用request mapping handler mapping,获取请求地址以判断本地是否存在请求的目标方法,从而判断是执行本地调用还是远程调用。
66.步骤s32,若存在,则直接调用本地方法栈,以完成所述远程调用服务。
67.在本实施例中,如果存在请求的目标方法,则直接通过反射的方式调用本地方法栈,从而完成远程调用服务,实现对所需要业务单元的调用。
68.可选地,步骤s32,若存在,则直接调用本地方法栈,以完成所述远程调用服务,包括:步骤s321,通过local executor使用请求路径,匹配查找本地方法。
69.本实施例中,请求路径即通过executor select strategy使用request mapping handler mapping所获取的请求地址,使用这个请求地址对应查找匹配本地方法。
70.步骤s322,通过reflect反射执行所述本地方法,并接受返回值,以完成所述远程调用服务。
71.在本实施例中,本地方法即为通过本地调用方式直接调用本地的业务单元,接受到的返回值即为客户端所需要调用的业务单元。
72.本实施例中,通过在本地存在匹配的方法时,直接通过反射的方式调用本地方法栈,无需使用额外的网络带宽消耗,实现了更加迅捷的获取远程服务响应结果。
73.可选地,步骤s31,获取请求地址以判断本地是否存在请求的目标方法步骤之后,还包括:步骤s311,若不存在,则执行远程方法,通过 feign 执行 http 请求远程服务。
74.在本实施例中,通过feign执行http请求远程服务,首先通过remote executor使用host resolver,以通过app code(系统编码)到配置中心拉取服务地址。其中,配置中心中注册有每个启动的服务的系统编码及其对应的地址。再使用remote service动态构建feign远程调用客户端,从而向远程服务发送请求并携带认证信息,从而得到远程服务响应结果。其中,feign是netflix开发的声明式、模板化的http客户端,feign可以实现更快捷、优雅地调用http api。feign的使用非常简单,通过创建一个接口,并在接口上添加一些注解,就实现了feign的使用。
75.步骤s312,使用json对远程服务响应结果进行拆箱解析处理,以完成所述远程调用服务。
76.json(javascript object notation,javascript 对象标记法)是一种存储和交换数据的语法,是通过 javascript 对象标记法书写的文本,能够把数据作为 javascript 对象来处理,无需复杂的解析和转译。由于数据在浏览器与服务器之间进行交换时,只能是文本,所以服务端的远程服务响应结果会使用json来进行传输,因此,在客户端接收到远程响应结果时需要进行拆箱解析处理,转换为 javascript 对象,以完成远程调用服务,实现分离部署下的业务单元之间的调用。
77.本实施例中,通过在本地不存在匹配的方法时,则通过 feign 执行 http 请求远程服务,并使用json对远程服务响应结果进行拆箱解析处理,以完成所述远程调用服务。实现了在分离部署场景下的远程调用,且由于使用了feign,因此,还集成了异常处理、响应解析、日志记录、权限认证和统一地址等功能。
78.本实施例通过在执行代理流程时,获取请求地址以判断本地是否存在请求的目标方法,动态的执行不同的调用方法,具体实现了不同部署场景下,使用统一的调用方法实现业务单元之间的调用,产生了降低维护成本的技术效果。
79.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
80.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,
计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
81.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献