feign
一.什么是feign
之前使用ribbon作为负载均衡来进行实现consumer调用provider,这种调用模式需要去借助restful风格(RestTemplate),这种调用方式违背了程序员的思维。
后来springcloud提供了另外一种符合程序员思维的调用方式:声明式服务调用(Feign)
1.feign
虽然springcloud把他定义为声明式服务调用,但他仍然是一个负载均衡(换句话说,也可以实现负载均衡功能),其实feign只是集成了ribbon在里面,所有的负载均衡功能都是在ribbon所实现的,feign只要做调用
2.什么是声明式服务调用
二.feign使用
1.首先创建consumer-feign工程
2.然后去创建api工程
3.在api工程中,只需要编写service层的接口,其他的什么都不需要写,然后让consumer工程去调用api工程中的service接口
4.因为consumer需要调用api工程,所以consumer必须要依赖于api工程
? api中都是service层的接口,因为api在这里用的不是serviceImpl实现类,而是直接对应了provider的controller,所以api不需要依赖service层
5.因为最终api中的方法也有返回值(Book,List...),所以需要依赖于model
6.feign依赖(放在api工程中):因为feign层 依赖api层 并且api层也需要feign 所以就吧依赖放在api层
<!--feign 依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
三.feign的注意事项
1..在feign中,所有的接口方法的返回值类型以及方法名还是参数名都必须要和provider项目中的方法一模一样
2.在使用feign的时候,接口中的方法也必须要使用@GetMapping和@PostMapping这里也必须要和provider的方法注解一模一样,只要feign报错,无非就是以上的两个点没有注意到,还有绝对就是找不到provider项目
3.千万不要忘记在接口上添加注解(@FeignClient)
//value 指向配置文件中spring.application.name的值 @FeignClient(value = "employee-provider")