Feign 的使用
什么是Feign?
Feign : Declarative REST clients。
Feign 是一個聲明web服務客戶端,這便得編寫web服務客戶端更容易,使用Feign 創建一個接口並對它進行注解,它具有可插拔的注解支持包括Feign注解與JAX-RS注解,Feign還支持可插拔的編碼器與解碼器,Spring Cloud 增加了對 Spring MVC的注解,Spring Web 默認使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的負載均衡的HTTP客戶端 Feign。(來源於Spring Cloud Netflix 官網文檔)
- Feign 在 github 上的開源文檔 : https://github.com/OpenFeign/feign/wiki
怎么使用Feign
首先繼續使用上次的”服務注冊中心”與”服務提供者”。接下來,就是將 Fegin 整合到”服務消費者”中。
引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
注入注解
在 Spring Boot 主類加入注解@EnableFeignClients開啟 Fegin 功能。
注入接口
創建接口,具體如下:
@Component
@FeignClient(value = "my-service")
public interface ServiceClient {
@RequestMapping("/service")
String printf();
}
- 使用
@Component注解向 Spring Boot 中注入該組件。 - 使用
@FeignClient("")注解來綁定該接口對應的服務 - 通過 Spring MVC 的注解來配置服務下的具體實現。
在Controller中調用接口
@RestController
public class ConsumerController {
@Autowired
private ServiceClient serviceClient;
@RequestMapping("/test")
public String test(){
return serviceClient.printf();
}
}
最后,啟動”注冊中心”、”服務提供者”、”服務消費者”等工程。訪問 http://localhost:2222/test 就可以在”服務提供者”控制台查看到負載均衡的實現。
注意事項
注意注意注意
當Spring Cloud版本為 Brixton.RELEASE ,會拋出異常:
Attribute ‘value’ in annotation [org.springframework.cloud.netflix.feign.FeignClient] must be declared as an @AliasFor [serviceId], not [name]
解決辦法:
將Spring Cloud版本改為 Brixton.SR5 或 Camden.RELEASE 即可。
