作者介绍:计算机专业研究生,现企业打工人,从事Java全栈开发
主要内容:技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流(SCI论文两篇)
上点关注下点赞 生活越过越灿烂
新技术的出现肯定是解决目前存在的不足
存在问题
RestTemplate方式发起远程调用的代码:
String forObject = restTemplate.getForObject("http://order-service/order/add", String.class);
存在下面的问题:
- 代码可读性差,编程体验不统一(还得需要写url)
- 参数复杂URL难以维护
Feign的介绍
定义和使用Feign
场景:user-service
服务调用order-service
服务里的方法
做法:
需要在user-service
服务中编写order-service
的feign客户端
-
引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.0.RELEASE</version> </dependency>
-
开启自动装配功能
在启动类上面添加@EnableFeignClients注解
-
编写feign客户端
在user-service
中新建一个接口,内容如下:
这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:
- 服务名称:order-service
- 请求方式:GET
- 请求路径:/order/add
- 请求参数:无
- 返回值类型:String
这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。
-
测试
使用Feign客户端代替RestTemplate:
总结:
使用Feign的步骤:
① 引入依赖
② 添加@EnableFeignClients注解
③ 编写FeignClient接口
④ 使用FeignClient中定义的方法代替RestTemplate
同时Feign还实现负载均衡,可以通过看它的依赖看到ribbon