[SpringCloud踩坑笔记]-[Spring的openfeign使用的问题总结]
SpringCloud体系内部使用FeignClient注解,一般涉及到3个参数name,path,url1.name:指service的名称,比如本人的spring cloud项目里已搭建了spring cloud gateway网关,并且希望http请求都能通过该gateway进行转发,所以server都设置为gateway2.path:一般设置为通过网关转发后的具体的servic...
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如下:
写这篇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
调用是成功的,再次证明了上面的判断。
更多推荐
所有评论(0)