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
即可。