将远程服务像本地一样调用?Feign 来帮你!
📢博客主页:https://www.infoq.cn/profile/F7BF297568FAA8/publish
📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!
📢本文由 XiaoLin_Java 原创🙉
📢不要等待机会,而要创造机会。✨
🌈往期回顾
感谢阅读,希望能对你有所帮助,博文若有瑕疵请在评论区留言或在主页个人介绍中添加我私聊我,感谢每一位小伙伴不吝赐教。我是 XiaoLin,一个问啥啥都会,干啥啥不行的小男孩。
七、远程调用:Feign
7.1、Feign 简介
Feign 是 Spring Cloud 提供的一个声明式的伪 Http 客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos 很好的兼容了 Feign, Feign 默认集成了 Ribbon, 所以在 Nacos 下使用 Fegin 默认就实现了负载均衡的效果。
7.2、Feign 实战
7.2.1、添加依赖
在 shop-order-server 项目的 pom 文件加入 Fegin 的依赖。
7.2.2、添加注解
我们需要在启动类上添加 @EnableFeignClients 注解,只有有了这个注解才会扫描。
7.2.3、新增 ProductFeignApi
在 Shop-order-server 中新增一个接口。
7.2.4、修改 Controller
7.3、Feign 的重要属性
我们可以配置超时属性。
7.4、Feign 实现原理
启动后会会根据配置在启动类上的 @SpringBootApplication 去扫描贴了 @FeignClient 注解的类,并为其创建代理对象。
通过反射拿到代理类实现的接口:ProductFeignApi。
通过反射拿到接口上注解并且将注解中心的 name 属性拿出来:product-service。
通过反射拿到接口中的方法,并且拿到接口中方法上的注解 @RequestMapping,并且把值拿出来:/product。
将方法中参数注解中的值也拿出来,这个是我们传进来的参数:productId。
拼接出路径:http://product-service/product?productId=1。
根据本地的服务清单去找对应的节点信息。
根据你配置的 ribbon 负载均衡策略去选择节点。
将 product-service 替换成对应的节点信息和端口。
使用 RestTemplate 发送请求。
版权声明: 本文为 InfoQ 作者【XiaoLin_Java】的原创文章。
原文链接:【http://xie.infoq.cn/article/61fe2b3abd7e8c8426f033198】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论