SpringCloud体系内部使用FeignClient注解,一般涉及到3个参数name,path,url

1.name:指service的名称,比如本人的spring cloud项目里已搭建了spring cloud gateway网关,并且希望http请求都能通过该gateway进行转发,所以server都设置为gateway

2.path:一般设置为通过网关转发后的具体的service名称,比如这里有一个address的微服务

3.url:这里设置为gateway的url地址

实际使用中,比如另外有一个叫client的服务,要请求address服务的/adminArea/test接口

adminArea是Controller名称,test是位于该Controller里的action方法(get请求)

那么在@FeignClient注解的interface里,代码如下:

以上代码可以正常运行,并且调用目标url如下:

http://192.168.0.210:1000/address/adminArea/getRegionByAddress?city=%E4%B8%8A%E6%B5%B7&address=%E4%B8%8A%E6%B5%B7%E5%B8%82%E9%95%BF%E5%AE%81%E5%8C%BA

 

写这篇blog,并非为了介绍@FeignClient注解在spring cloud内的使用方式,这个样例太多了,google随意能搜到一大堆。

而是想要测试下,如果name/path/url的这三个参数发生变化,是如何影响了feign生成的目标url。

下面分两类情况分别进行测试。

A情况-该FeignClient的interface在同一个spring cloud微服务体系内使用

B情况-非spring cloud体系的项目如何使用该FeignClient,比如一个纯粹的java项目

 

下面分别来测试:

 

A-1.改变name的指

调用结果是成功的,说明修改name的值完全没问题,这里的name仅仅是一个标识而已,并非代表真实的网关或者服务地址

 

A-2.改变path的值

调用失败,报如下错误:

404错误,很明显path参数会影响Feign生成的目标url

 

A-3.修改url的值

调用失败,错误如下:

这次feign直接把错误的目标url都抛出来了,说明url参数影响了Feign对目标url的生成

 

下面在非spring cloud体系里测试OpenFeign的使用问题。

先在spring cloud工程里把OpenFeign工程打包并deploy到mavan私有库

并在普通Java工程的pom文件里添加对该OpenFeign工程的依赖

通过Feign.build的方式来使用OpenFeign

 

不修改任何参数,直接调用test接口失败

404错误,应该是生成的url不正确导致.

 

但如果把接口稍微做点修改:

调用就成功了。

说明在非spring cloud体系里调用FeignClient的接口,注解里的path参数并未生效

同样的即便把上面注解的url参数修改为一个无效的地址,调用依然可以成功。

说明该interface是通过Feign.Build()来生成的,@FeignClient注解里的参数已经在这里被忽略了。

 

那么修改Feign.Build()的target参数:

并且恢复@FeignClient的interface

调用是成功的,再次证明了上面的判断。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐