敞开成长之旅!这是我参加「日新计划 12 月更文应战」的第6天,点击检查活动概况

前语

在分布式微服务的组织系统下,咱们日常开发调用内部微服务的方法通常是Feign调用,grpc、dubbo,大部分的公司后端架构根本是以Spring Cloud 系统下的,所以根本会用到Feign,Feign是 Netflix开发的声明式、模板化的HTTP客户端,具体对Feign的源码分析之前也有写过,Feign长途调用原理分析 – 想了解的小伙伴具体能够参考这篇文章,本文主要介绍Feign作为客户端去调其他微服务的使用,主要是结合我日常开发的场景来做具体分析。

Feign调用长途服务

先说,我目前地点公司微服务调用的状况,也是经过Feign通讯,咱们知道调Feign接口,需要把被调用服务的jar包引进调用方服务的pom文件中,经过jar包中露出的api接口进行长途调用,当然也需要在装备中心加入对应的FeignClient装备。

被调用方Feign接口露出

Feign作为HTTP客户端调用远程服务

Feign客户端注册

Feign作为HTTP客户端调用远程服务

调用方pom文件引进jar

[image:0CBD7317-820B-47C0-BCE9-EF41D8CEDE8D-24040-0000416206F49413/C8CDE418-12CC-4B7B-B381-4E58CB59754F.png]

Feign作为HTTP客户端调用远程服务

注册中心FeignClient装备

Feign作为HTTP客户端调用远程服务

以上装备完成就能够经过完成类里边注入feign接口,调用长途服务的接口了。

Feign作为HTTP客户端调用远程服务

Feign经过http的方法长途调用

正常状况下,服务与服务之前能够经过FeignClient进行调用,可是我在开发的过程中遇到个状况,公司项目我是A服务,我需要去调B服务,正常是我将B服务的jar包引进我的项目里,然后经过B服务露出的Feign接口进行调用,可是出现了一个问题,B服务又引证了common包的一些依靠,而A服务的有一些组件像Mybatis PaginationInterceptor分页拦截器、FeignConfig等一些装备,连类名都与common包的有抵触,所以引进后,项目发动就会报错。

Feign作为HTTP客户端调用远程服务
所以就不能经过引证jar的方法调用服务,jar包依靠的问题不能在短时间处理,那么只能经过另外一种调用方法了,经过在A服务写FeignClient,经过URL的方法指向B服务。

A服务Feign界说

Feign作为HTTP客户端调用远程服务

Feign作为HTTP客户端调用远程服务

这儿我经过URL,读取装备中心B服务的域名,直接经过http的方法恳求B服务,当然B服务也需要经过controller供给接口名

Controller:

Feign作为HTTP客户端调用远程服务

Service:

Feign作为HTTP客户端调用远程服务

Serviceimpl:

Feign作为HTTP客户端调用远程服务

这样就能够经过http的恳求调用长途服务,当然也能够经过httpClient的方法去调长途服务,当然这需要写http装备类,由于都是内部服务所以就没有去用这种方法调用。

总结

Feign的调用的确许多方便简练,能够省去许多代码, 可是项目之前jar包依靠的问题的确咱们日常开发中需要主要的一个地方,不然就向我目前公司项目这样,A服务用的是一个开源的服务,里边根本集成东西有,并没有集成内部common包,所以就会出现这种状况,总结一下好好学技术,所遇到的问题总有许多种处理方法,假如不学的话那么就走到了死胡同了~