当前位置:首页 > 技术文章 > 正文内容

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

zonemu2个月前 (08-11)技术文章27

前言

在分布式微服务的机构体系下,我们日常开发调用内部微服务的方式通常是Feign调用,grpc、dubbo,大部分的公司后端架构基本是以Spring Cloud 体系下的,所以基本会用到Feign,Feign是 Netflix开发的声明式、模板化的HTTP客户端,本文主要介绍Feign作为客户端去调其他微服务的使用,主要是结合我日常开发的场景来做具体分析。

Feign调用远程服务

先说,我目前所在公司微服务调用的情况,也是通过Feign通信,我们知道调Feign接口,需要把被调用服务的jar包引入调用方服务的pom文件中,通过jar包中暴露的api接口进行远程调用,当然也需要在配置中心加入对应的FeignClient配置。

被调用方Feign接口暴露

Feign客户端注册

调用方pom文件引入jar

注册中心FeignClient配置

以上配置完成就可以通过实现类里面注入feign接口,调用远程服务的接口了。



Feign通过http的方式远程调用

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



所以就不能通过引用jar的方式调用服务,jar包依赖的问题不能在短时间解决,那么只能通过另外一种调用方式了,通过在A服务写FeignClient,通过URL的方式指向B服务。

A服务Feign定义



这里我通过URL,读取配置中心B服务的域名,直接通过http的方式请求B服务,当然B服务也需要通过controller提供接口名

Controller:

Service:

Serviceimpl:

这样就可以通过http的请求调用远程服务,当然也可以通过httpClient的方式去调远程服务,当然这需要写http配置类,由于都是内部服务所以就没有去用这种方式调用。

总结

Feign的调用确实很多方便简洁,可以省去很多代码, 但是项目之前jar包依赖的问题确实我们日常开发中需要主要的一个地方,不然就向我目前公司项目这样,A服务用的是一个开源的服务,里面基本集成东西有,并没有集成内部common包,所以就会出现这种情况,总结一下好好学技术,所遇到的问题总有很多种解决方式,如果不学的话那么就走到了死胡同了~

相关文章

Linux之父:Linux内核5.8是“我们有史以来最大的发行版之一”

Linux内核负责人Linus Torvalds对Linux内核版本5.8的第一个候选发布版本(rc1)看得出来还是挺满意的,该版本包含80万行新代码行和超过14,000个更改的文件,占内核文件检修的...

据说是可以替代 Windows 的 5个 Linux 发行版

现如今有数以千计的 Linux 发行版可供您使用,然而人们却无法选择一个完美的操作系统来替代 Windows。 使用 Windows 时,傻瓜都能操作自如,同样的方法却不适用于 Linux。在这里,您...

「 VUE3 + TS + Vite 」父子组件间如何通信?

组件之间传值,大家都很熟悉,涉及到 VUE3 +TS 好多同学就无从下手了,所以分享这篇文章,希望看完后提起 VUE3+TS 能够不慌不忙。平时使用的函数如:ref、reactive、watch、co...

傻瓜式DEVOPS实践手册——Gitlab部署

GitLab是一款开放源代码的DevOps平台,用于实现从项目规划、源代码管理、CI/CD到监控和安全性的全方位集成。GitLab主要用于版本控制、协同开发、持续集成/持续部署 (CI/CD)、自动化...

程序员项目经理如何调动组员积极性

#这个方法应该很适合程序员都说程序员是比较傲娇,有点小自负(有的是相当,那不叫自负,那是实力的体现好吗),略微呆萌,自尊心偏小强的一类族群。是吗?中招了吗?作为管理好几个组员,要完成一个大项目的项目经...

jenkins2.107+tomcat8+jdk1.8的安装和发布代码3种方式

jenkins2.107+tomcat8+jdk1.8的安装和发布代码3种方式如果对运维课程感兴趣,可以在b站上或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频1....