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

一种服务调用方法、框架、装置及存储介质与流程

2022-07-16 23:35:57 来源:中国专利 TAG:


1.本发明涉及软件开发技术领域,特别涉及一种服务调用方法、框架、装置及存储介质。


背景技术:

2.现有技术中,使用开源框架进行服务发现时,需要明确发送 http 请求的细节,且同一开源框架在不同客户端下的兼容性各不相同,在实际使用时要求用户明确不同客户端的配置细节,实现代码具有高度重复性。
3.因此,如何提供一种能够兼容多种客户端调用实现以及减少代码开发量的服务调用方法是本领域技术人员亟待解决的技术问题。


技术实现要素:

4.有鉴于此,本发明的目的在于提供一种服务调用方法、装置、设备及存储介质,能够兼容多种客户端调用实现,避免代码重复以减少代码开发量。其具体方案如下:本技术的第一方面提供了一种服务调用方法,包括:定义用于调用目标服务的目标接口;将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。
5.可选的,所述定义用于调用目标服务的目标接口,包括:对接口方法的内容及表征接口方法名路径的方法注解进行定义,并将所述方法注解绑定至对应的所述接口方法,得到所述目标接口。
6.可选的,所述目标注解中封装的所述服务请求信息包括请求路径、请求方式中的至少一种;可选的,所述通过对接口方法进行定义的方式定义用于调用目标服务的目标接口之后,还包括:创建所述目标接口的目标委托类,并创建所述目标委托类的目标代理类;其中,所述目标委托类继承了所述目标接口中的所述目标注解、所述接口方法及对应的所述方法注解;相应的,所述对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息通过所述接口方法的实现来对所述目标服务进行调用,包括:通过调用所述目标代理类的增强方法调用所述目标委托类中的所述目标注解以得到所述目标注解中的所述服务请求信息;通过调用所述目标代理类的增强方法调用所述目标委托类中的所述接口方法及
对应的所述方法注解对所述服务请求信息进行参数配置,并根据配置后的所述服务请求信息对目标服务进行调用。
7.可选的,所述创建所述目标委托类的目标代理类,包括:通过jdk动态代理的方式创建所述目标代理类;或,通过基于spring框架的bin扫描动态注入代理对象的方式创建所述目标代理类。
8.可选的,所述服务调用方法,还包括:定义方法拦截器并将所述方法拦截器进行封装生成拦截器注解;将所述拦截器注解绑定至所述目标接口或所述目标接口中的所述接口方法,以便调用所述目标接口时根据所述拦截器注解调用所述方法拦截器;和/或,定义回调函数并将所述回调函数进行封装生成函数注解;将所述函数注解绑定至所述目标接口或所述目标接口中的所述接口方法,以便调用所述目标接口时根据所述函数注解调用所述回调函数进行请求响应。
9.可选的,所述定义用于调用目标服务的目标接口之后,还包括:对所述目标接口添加请求头;其中,添加请求头的方式为链式调用添加或通过注解添加。
10.本技术的第二方面提供了一种服务调用框架,所述服务调用框架由调用步骤集成;其中,所述调用步骤包括定义用于调用目标服务的目标接口;将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。
11.本技术的第三方面提供了一种服务调用装置,包括:接口定义模块,用于定义用于调用目标服务的目标接口;注解绑定模块,用于将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;调用模块,用于对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。
12.本技术的第四方面提供了一种电子设备,所述电子设备包括处理器和存储器;其中所述存储器用于存储计算机程序,所述计算机程序由所述处理器加载并执行以实现前述服务调用方法。
13.本技术的第五方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现前述服务调用方法。
14.本技术提供的服务调用方法先定义用于调用目标服务的目标接口;然后将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;最后对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。可见,本技术以注解的方式将服务请求信息绑定到自定义的目标接口,在此基础上,通过调用本地目标接口实现服务调用。整个调用过程用户无需关注请求的客户端实现和配置细节,能够兼容多种客户端调用实现,同时避免代码重复以减少代码开发量。本技术提供的服务调用框架、服务调用装置、电子设备和
存储介质也能达到上述技术效果,在此不再进行赘述。
附图说明
15.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
16.图1为本技术提供的一种服务调用方法流程图;图2为本技术提供的一种服务调用装置结构示意图;图3为本技术提供的一种服务调用电子设备结构图。
具体实施方式
17.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
18.现有技术中,使用开源框架进行服务发现时,需要明确发送 http 请求的细节,且同一开源框架在不同客户端下的兼容性各不相同,在实际使用时要求用户明确不同客户端的配置细节,实现代码具有高度重复性。针对上述技术缺陷,本技术以注解的方式将服务请求信息绑定到自定义的目标接口,在此基础上,通过调用本地目标接口实现服务调用。整个调用过程用户无需关注请求的客户端实现和配置细节,能够兼容多种客户端调用实现,同时避免代码重复以减少代码开发量。
19.图1为本技术实施例提供的一种服务调用方法流程图。参见图1所示,该服务调用方法包括:s11:定义用于调用目标服务的目标接口。
20.本实施例中,首先需要创建用于服务调用的目标接口,也即自定义所述目标接口。只需要定义接口,调用接口即可,不必关心具体发送请求的细节。对所述目标接口的定义实际上是对所述目标接口中的接口方法的定义,具体的,本实施例先对所述接口方法的内容及表征接口方法名路径的方法注解进行定义,然后将所述方法注解绑定至对应的所述接口方法,最终得到所述目标接口。
21.s12:将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口。
22.本实施例中,创建好所述目标接口之后,将服务请求信息进行封装得到目标注解,并将所述目标注解绑定至所述目标接口。由于不限定所述服务请求信息的客户端类型,因此可以同时兼容原生http、okhttp3、apache httpclient等多种客户端实现调用。
23.其中,所述服务请求信息包括请求路径、请求方式中的至少一种。所述请求路径也即接口域名(url),所述请求方式包括多种形式,如表单提交(常量 具体参数,通过基本注解即可实现)或json请求(需要定义对象,用json注解标记对象)。除此之外,所述服务请求信息还包括请求头header以及请求体body等信息。更进一步的,对于http的所有请求信息
(请求方式、url、header以及body 等信息),通过注解的方式绑定到自定义的接口上。本实施例中,所述服务请求信息除了以注解的方式绑定至所述目标接口外,还可以通过链式编程的方式添加至所述目标接口。特别的,对于需要指定请求头的接口,请求头的添加方式包括但不限于链式调用添加、通过注解添加。
24.具体的,首先选择一个目标客户端,不同的客户端种类进行不同的客户端配置;然后添加请求头,所述目标接口指定请求头,请求头的添加方式包括但不限于链式调用添加和通过注解添加;接着对http方法进行注解,本实施例提供例如@get、@post、@delete等类型的注解来标记一个http方法;其次是定义参数和变量,可以通过@param注解来指定需要传递参数的名称并通过@varible注解来替换请求path或者请求头内的变量。最后发送json格式请求、其中包括定义一个请求体和定义一个接口等。定义一个请求体对应的实现代码如下所示:@data@accessors(chain = true)public class reqjson { private integer aid; private integer bid; @suppresswarnings("rawtypes") private list devicetypelist = new arraylist《》(); private integer type; }s13:对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。
25.本实施例中,通过对绑定了所述目标注解的所述目标接口进行调用的方式获取所述目标注解中封装的所述服务请求信息,以根据所述服务请求信息对目标服务进行调用。也即通过调用本地接口方式发送服务请求,请求发送方通过调用用户定义的接口便能自动发送请求和接受请求的响应。
26.特别的,本实施例可以通过委托类和代理类实现调用,因此,首先需要构建委托类。具体的,通过对接口方法进行定义的方式定义用于调用目标服务的目标接口之后,进一步创建所述目标接口的目标委托类,其中,所述目标委托类继承了所述目标接口中的所述目标注解、所述接口方法及对应的所述方法注解。然后创建所述目标委托类的目标代理类,所述目标代理类替所述目标委托类处理消息、过滤消息、把消息转发给所述目标委托类以及事后处理消息等。在一种实施例中,通过jdk动态代理的方式创建所述目标代理类。在另一种实施例中,通过基于spring框架的bin扫描动态注入代理对象的方式创建所述目标代理类。第二种方法能够实现动态代理对象的快速创建,不需要build和service。
27.在此基础上,调用所述目标接口时,实际是通过调用所述目标代理类的增强方法调用所述目标委托类中的所述目标注解以得到所述目标注解中的所述服务请求信息。也即通过对所述目标代理类invoke方法的增强实现客户端(如http客户端)的初始化,自定义注解解析和封装,最终到http请求与应答 。进一步的,通过调用所述目标代理类的增强方法调用所述目标委托类中的所述接口方法及对应的所述方法注解对所述服务请求信息进行参数配置,并根据配置后的所述服务请求信息对目标服务进行调用。
28.本实施例的服务调用还支持拦截器功能和回调函数功能。拦截器功能的实现具体包括定义拦截器并将所述拦截器进行封装生成拦截器注解,然后将所述拦截器注解绑定至所述目标接口或所述目标接口中的所述接口方法,以便调用所述目标接口时根据所述拦截器注解调用所述拦截器。通过上述过程,拦截器能达到链路追踪、增加动态参数、过滤敏感信息及在一些需要token校验、动态token、刷新token的接口时做前置合法token获取等功能。
29.可以理解,所述拦截器可以设置在不同位置,可以设置在所述目标接口上,也可以设置在所述目标接口中的方法上。当设置在所述目标接口上,是通过inplements tealnterceptor,继承公共接口来实现一个新的拦截器,可以重写prehandle()或posthandle()方法来实现响应的业务场景。另外,所述拦截器的包括多种定义方式,包括但不限于定义全局拦截器、定义类级别拦截器或定义方法级别拦截器等。配置多个拦截器时,还需要通过重写order()方法来控制拦截器加载的优先级,当同时配置了3个拦截器时,拦截器优先级方法级别》类级别》全局。
30.本实施例添加一个增加动态参数的拦截器后的代码实现如下所示(可以看到请求参数有ald:211和拦截器添加的动态参数uuid):public class addparmsinterceptor implements teainterceptor{
ꢀꢀꢀꢀ
public boolean prehandle(tearequest request){
ꢀꢀꢀꢀꢀꢀꢀꢀ
system.err.println("addparmsinterceptor prehandle");
ꢀꢀꢀꢀꢀꢀꢀꢀ
map《string, object》 requestmap = request.getrequestmap();
ꢀꢀꢀꢀꢀꢀꢀꢀ
requestmap.put("uuid", uuid.randomuuid().tostring());
ꢀꢀꢀꢀꢀꢀꢀꢀ
return true;
ꢀꢀꢀ
};
ꢀꢀꢀꢀ
public int order() {
ꢀꢀꢀꢀꢀꢀꢀꢀ
return
ꢀ‑
1;
ꢀꢀꢀ
}}@mapping(value="/api/business/base/enterprise/v1/getaid",httpmethod=httpmethod.post,interceptors= {addparmsinterceptor.class})string testmapping(@param("aid") integer id);回调函数功能的实现具体包括将所述函数注解绑定至所述目标接口或所述目标接口中的所述接口方法,以便调用所述目标接口时根据所述函数注解调用所述回调函数进行请求响应。本实施例除了定义所述目标接口外还定义了该目标接口的回调函数接口 配置回调函数。此时,调用所述目标代理类的增强方法后还包括调用所述回调函数,通过所述回调函数中定义的“调用成功方法”和“调用失败方法”返回内容,实现所述目标接口在业务场景下的响应。回调函数的配置与上述拦截器的配置相似,支持全局、类级别、方法级别配置,优先级关系与前文所述关系一致,但有且一个http请求仅支持一个回调函数。代码示例如下:public interface teacallback {
ꢀꢀꢀꢀ
/**
ꢀꢀꢀꢀ
*
ꢀꢀꢀꢀ
* @title: onsuccess
ꢀꢀꢀꢀ
* @description: todo(请求成功后调用)
ꢀꢀꢀꢀ
* @param: @param request
ꢀꢀꢀꢀ
* @param: @param response
ꢀꢀꢀꢀ
* @return: void
ꢀꢀꢀꢀ
* @throws
ꢀꢀꢀꢀ
*/
ꢀꢀꢀꢀ
void onsuccess(tearequest request, tearesponse response);
ꢀꢀꢀꢀ
/**
ꢀꢀꢀꢀ
*
ꢀꢀꢀꢀ
* @title: onerror
ꢀꢀꢀꢀ
* @description: todo(请求失败后调用)
ꢀꢀꢀꢀ
* @param: @param request
ꢀꢀꢀꢀ
* @param: @param response
ꢀꢀꢀꢀ
* @return: void
ꢀꢀꢀꢀ
* @throws
ꢀꢀꢀꢀ
*/
ꢀꢀꢀꢀ
void onerror(tearequest request, tearesponse response);
ꢀꢀꢀꢀ
}除此之外,本实施例在调用接口后还可以增加其余处理功能,例如定义网关支持或日志debug。本实施例兼容开放平台sdk和网关sdk的功能,可以通过简单的@gatewayapi注解和@gatewaydesc注解实现网关接口的调用。具体包括定义网关接口、构造网关请求和查看调用结果三个步骤。对于日志debug,可以通过openlog(false)来设置是否开启日志。
31.可见,本技术实施例先定义用于调用目标服务的目标接口;然后将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;最后对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。本技术实施例以注解的方式将服务请求信息绑定到自定义的目标接口,在此基础上,通过调用本地目标接口实现服务调用。整个调用过程用户无需关注请求的客户端实现和配置细节,能够兼容多种客户端调用实现,同时避免代码重复以减少代码开发量。
32.本技术实施例还提供的一种服务调用框架,所述服务调用框架为轻量级的框架,所述服务调用框架由调用步骤集成。所述调用步骤包括定义用于调用目标服务的目标接口;将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。
33.上述服务调用框架在与spring boot 项目集成时,需要添加依赖和配置,依赖方式包括但不限于maven依赖、gradle依赖,添加了就能使用对应的框架。spring boot 项目集成时,所述服务调用框架的具体使用过程为:定义接口、配置扫描包、调用接口、查询调用
结果。
34.上述服务调用框架能够兼容多种客户端的调用实现功能。也即自定义框架对不同类型的客户端的请求是兼容的,包括但不限于http、okhttp3、apache httpclient等多种客户端,一般定义接口时默认为http客户端。此时,所述服务调用框架为一个开源的 java http客户端框架,它能够将http的所有请求信息,例如请求方式、url、header以及body等信息,通过注解的方式绑定到自定义的接口上,再通过调用本地接口的方式发送 http 请求。使用所述服务调用框架就像使用类似dubbo或feignclient框架一样,用户无需关注具体的客户端实现和配置细节,只需要简单几个属性的配置即可完成服务请求和响应过程,能缩短90%的重复代码。
35.参见图2所示,本技术实施例还相应公开了一种服务调用装置,包括:接口定义模块11,用于定义用于调用目标服务的目标接口;注解绑定模块12,用于将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;调用模块13,用于对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。
36.可见,本技术实施例先定义用于调用目标服务的目标接口;然后将服务请求信息进行封装生成目标注解,并将所述目标注解绑定至所述目标接口;最后对绑定了所述目标注解的所述目标接口进行调用,以获取所述目标注解中封装的所述服务请求信息并根据所述服务请求信息对所述目标服务进行调用。本技术以注解的方式将服务请求信息绑定到自定义的目标接口,在此基础上,通过调用本地目标接口实现服务调用。整个调用过程用户无需关注请求的客户端实现和配置细节,能够兼容多种客户端调用实现,同时避免代码重复以减少代码开发量。
37.在一些具体实施例中,所述接口定义模块11,具体用于对接口方法的内容及表征接口方法名路径的方法注解进行定义,并将所述方法注解绑定至对应的所述接口方法,得到所述目标接口。
38.在一些具体实施例中,所述服务调用装置还包括:委托类创建模块,用于创建所述目标接口的目标委托类;其中,所述目标委托类继承了所述目标接口中的所述目标注解、所述接口方法及对应的所述方法注解;代理类创建模块,用于创建所述目标委托类的目标代理类;第一增强调用模块,用于通过调用所述目标代理类的增强方法调用所述目标委托类中的所述目标注解以得到所述目标注解中的所述服务请求信息;第二增强调用模块,用于通过调用所述目标代理类的增强方法调用所述目标委托类中的所述接口方法及对应的所述方法注解对所述服务请求信息进行参数配置,并根据配置后的所述服务请求信息对目标服务进行调用;拦截器功能实现模块,用于定义拦截器并将所述拦截器进行封装生成拦截器注解;将所述拦截器注解绑定至所述目标接口或所述目标接口中的所述接口方法,以便调用所述目标接口时根据所述拦截器注解调用所述拦截器;回调函数功能实现模块,用于定义回调函数并将所述回调函数进行封装生成函数注解;将所述函数注解绑定至所述目标接口或所述目标接口中的所述接口方法,以便调用
所述目标接口时根据所述函数注解调用所述回调函数进行请求响应;请求头添加模块,用于对所述目标接口添加请求头;其中,添加请求头的方式为链式调用添加或通过注解添加。
39.在一些具体实施例中,所述代理类创建模块,具体包括:第一创建单元,用于通过jdk动态代理的方式创建所述目标代理类;第二创建单元,用于通过基于spring框架的bin扫描动态注入代理对象的方式创建所述目标代理类。
40.进一步的,本技术实施例还提供了一种电子设备。图3是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本技术的使用范围的任何限制。
41.图3为本技术实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的服务调用方法中的相关步骤。
42.本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
43.另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222及数据223等,存储方式可以是短暂存储或者永久存储。
44.其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,以实现处理器21对存储器22中海量数据223的运算与处理,其可以是windows server、netware、unix、linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的服务调用方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。数据223可以包括电子设备20收集到的服务请求等信息。
45.进一步的,本技术实施例还公开了一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被处理器加载并执行时,实现前述任一实施例公开的服务调用方法步骤。
46.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
47.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
…”
限定的要素,并不排除
在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
48.以上对本发明所提供的服务调用方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

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

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

相关文献