一种基于自定义插件的无接口定义Feign客户端远程调用方法与流程

文档序号:29814121发布日期:2022-04-27 09:20阅读:214来源:国知局
一种基于自定义插件的无接口定义feign客户端远程调用方法
技术领域
1.本发明涉及计算机技术领域,具体涉及一种基于自定义插件的无接口定义feign客户端远程调用方法。


背景技术:

2.目前springboot微服务项目之间接口远程调用所通常采用的springcloud的feign方法技术,在调用方项目会单独重新创建定义一个新的接口,并且会把被调用方中的接口中的方法名称及参数全数复制粘贴过来。
3.具体缺陷就在于:如果远程调用的接口数量比较多,比如上百个,那这个重复冗余的代码量就嫌大了,感觉是在做无用功。
4.具体缺陷的技术原因是:spring团队没有照顾到开发者使用远程接口调用的烦躁心态,而是强制开发者复制被调用方项目接口信息到调用方项目接口中,方便其系统的后续调用。可能是spring方认为这是一个小问题,开发者多做一点体力活没多大关系,而没有思考到或者是不愿意去从包名利用反射技术去注册接口代理类到ioc容器中。


技术实现要素:

5.本发明的目的在于提出了一种适用于基于自定义插件的无接口定义feign客户端远程调用方法,以期解决背景技术中存在的技术问题。
6.为了实现上述目的,本发明采用以下技术方案:
7.一种基于自定义插件的无接口定义feign客户端远程调用方法,包括:
8.s1:生成自定义插件:
9.s101:设置配置文件的属性前缀;属性前缀下存放调用对方项目接口所在的包名;
10.s102:根据配置文件的专有属性前缀下的包名字符串,根据反射机制找到该包下对应的接口名称列表;
11.s103:循环上一步获取到的接口名称列表,生成每一个接口对应的自己的代理类;
12.s104:在上一步生成的代理类中,获取每一个接口下的方法的服务名称,拼装远程调用url地址;再根据resttemplate模板,实施远程调用功能。
13.s105:将上一步生成的接口代理类,在程序初始化时,先于其它bean对象之前注入到ioc容器中;
14.s106:将该程序运行打成jar包上传到本地mavent私服中,作为一个自定义插件使用;
15.s2:在当前微服务项目中使用自定义插件。
16.在一些实施例中,所述拼装远程调用url地址为:“http://”+服务名称+请求参数。
17.在一些实施例中,所述s2:在当前微服务项目中使用自定义插件,包括:
18.s201:在当前微服务项目中pom文件maven中引入自定义插件的依赖;
19.s202:在当前微服务项目的配置文件中写上配置属性:被调用方接口所在的包名;
20.s203:在当前微服务项目要实施远程调用的代码中写一行代码:被调用方服务名称.被调用方法名称。
21.本技术所披露的一种基于自定义插件的无接口定义feign客户端远程调用方法可能带来的有益效果包括但不限于:本方法采用反射技术、jdk动态代理技术、resttemplate模板技术,解决springboot微服务项目间远程接口调用feign方法使用时,需要重新创新一个远程接口调用类,并复制粘贴被调用接口的方法名和参数列表这样一种繁琐操作的问题。有效地减少了微服务项目之间远程rpc的feign客户端调用时复制粘贴接口代码时所需要写的冗余代码量。
具体实施方式
22.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
23.相反,本技术涵盖任何由权利要求定义的在本技术的精髓和范围上做的替代、修改、等效方法以及方案。进一步,为了使公众对本技术有更好的了解,在下文对本技术的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本技术。
24.以下将对本技术实施例所涉及的一种基于自定义插件的无接口定义feign客户端远程调用方法进行详细说明。值得注意的是,以下实施例仅仅用于解释本技术,并不构成对本技术的限定。
25.为了消除微服务项目之间远程rpc的feign客户端调用时复制粘贴接口代码时所需要写的冗余代码量,我们有必要来梳理一下目前这个流行的feign客户端调用方法的实现思路是个什么样的流程步骤。创建这个feign客户端类,无非是继承了api接口。在feign客户端类上加上了一个feign客户端注解@feignclient,表达的意思就是这个feign客户端在调用到对方项目的api接口。那就进一步思考一下:如何去除这个feign客户端并找到一个更简捷的替代方法?经过深入分析springmvc底层源码后发现,去除这个feign客户端之后,我们需要做的替代工作的总体思路是:自动将调用对方的api接口注入到ioc容器中,同时直接使用对方api接口来实现rpc远程调用。
26.接下来的问题是:如何解决接口注入的问题?由于接口是无法直接注入容器的,那我们就采用jdk动态代理技术,生成接口代理类,再注入ioc容器中。
27.至此,调用对方项目的接口注入ioc容器的程序实现思路就完成了
28.那如何在当前项目中使用呢?
29.1.在当前项目的maven依赖中引入接口注入ioc容器的程序jar包;2.在配置文件中配置包名:服务名;3.在调用方法直接使用:接口名.方法名(参数)。
30.相比之前的传统做法,多了一个jar包的引入,配置文件的配置包名。而减少的是许许多多的重复接口的定义,以及接口中方法名(包括参数名)的复制粘贴。代码显示更加精炼清爽。这个jar做成后,就可以直接调用,而无需再创建源码。
31.注册jar包引入的另一个需要说明的情况是:对方项目包名下的所有接口都会被
注入到ioc容器中,也许有些接口方法是不会被调用的。但是这不妨碍开发者的使用,因为对于开发者来说完全是透明的,处理过程在后台全自动处理完成,毫无感知。如果我们的建立的包名的颗粒度比较小的话,后台自动多余注册的接口数量是比较少的。因此,两相比较,减少冗余代码量的效果是比较明显的,是程序员的福音。
32.在本技术的实施例中,基于自定义插件的无接口定义feign客户端远程调用方法可以包括:
33.s1:生成自定义插件:接口注入ioc容器程序是关键。该程序具体实现方式如下:
34.s101:设置配置文件的属性前缀。为的是说明什么样的属性前缀才是程序要提取其属性中的包名出来作为下一步处理用的。比如,前缀定义可以形如:mych.cloud.feign.feign-service。而在此前缀下存放的内容就是要调用对方项目接口所在的包名。
35.s102:根据配置文件的专有属性前缀下的包名字符串,根据反射机制找到该包下对应的接口名称列表;
36.s103:循环上一步获取到的接口名称列表,根据jdk动态代理技术,生成每一个接口对应的自己的代理类;
37.s104:在上一步生成的代理类中,获取每一个接口下的方法的服务名称,拼装远程调用url地址:“http://”+服务名称+请求参数。再根据resttemplate模板,实施远程调用功能。
38.s105:将上一步生成的接口代理类,在程序初始化时,先于其它bean对象之前注入到ioc容器中。因为其它bean对象可能会调用这些外面接口,因此必须最先注入ioc容器中。
39.s106:将该程序运行打成jar包上传到本地mavent私服中,作为一个自定义插件使用。开发可以从私服中引用依赖该jar包到程序pom的maven依赖中。这个jar包做好后,只需要做一次,以后都可重复使用。
40.s2:在当前微服务项目中使用自定义插件。
41.在一些实施例中,所述拼装远程调用url地址为:“http://”+服务名称+请求参数。
42.在一些实施例中,所述s2:在当前微服务项目中使用自定义插件,包括:
43.s201:在当前微服务项目中pom文件maven中引入自定义插件的依赖;
44.s202:在当前微服务项目的配置文件中写上配置属性:被调用方接口所在的包名;
45.s203:在当前微服务项目要实施远程调用的代码中写一行代码:被调用方服务名称.被调用方法名称。
46.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1