上一篇,講了SpringClound中的消費者采用Ribbon+Rest來實現,這回我們用組件Feign來實現服務的消費者,Fegin中也是默認集成了Ribbon的;和Eureka結合也能實現負載均衡;
概括來說,Fegin的區別就是基於注解來實現,具備可插拔的特性;
依賴前文說的Eureka,service-hello(一個項目,注冊兩個實例)
創建Fegin項目;
在Idea里,新建項目,選擇Spring initializer.
下面的pom
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置properties文件參數;
#服務端口 server.port=8886 #注冊服務中心地址 eureka.client.service-url.defaultZone=http://localhost:8882/eureka/ #注冊服務名 spring.application.name=service-feign
啟動類如下:
@EnableDiscoveryClient @EnableFeignClients //開啟Feign的功能: @SpringBootApplication public class SpringCloundEurekaFeginExampleApplication { public static void main(String[] args) { SpringApplication.run(SpringCloundEurekaFeginExampleApplication.class, args); } }
然后我們定義一個fegin的接口,在這個接口中我們通過@ FeignClient(“服務名”)來實現消費服務提供者;
//代表改接口用費"service-hello"的服務 提供 @FeignClient(value = "service-hello") public interface IFeginService { @RequestMapping(value = "/index") public String index(); }
我們再在fegin項目中暴露一個訪問接口,controller;
@RestController public class FeginController { @Autowired private IFeginService feginService; @RequestMapping("/index") public String index(){ return feginService.index(); } }
代碼基本編寫完成,下面我們來啟動項目;Eureka,service-hello(兩個實例),最后啟動service-fegin;
Feign整合了Ribbon和Hystrix,此外,Spring Cloud還對Feign提供了Spring MVC注解的支持,也使得我們在Web中可以使用同一個HttpMessageConverter
總起來說,Feign具有如下特性:
- 可插拔的注解支持,包括Feign注解和JAX-RS注解;
- 支持可插拔的HTTP編碼器和解碼器;
- 支持Hystrix和它的Fallback;
- 支持Ribbon的負載均衡;
- 支持HTTP請求和響應的壓縮。