likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 10

前言

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包,所以就会出现这种情况,总结一下好好学技术,所遇到的问题总有很多种解决方式,如果不学的话那么就走到了死胡同了~

转载自:https://juejin.cn/post/7178040651500486714
评论
请登录