上一篇,講了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請求和響應的壓縮。
