Fegin 介紹
spring cloud fegin ,他是基于Netflix Fegin實現(xiàn)得,整合了spring cloud Ribbon和spring cloud Hystrix,除了整合這兩者得功能外,他還提供了了一種聲明式得Web服務客戶端定義方式。
快速入門
創(chuàng)建一個spring boot項目命名為"eureka-bussniss-service-user-client-fegin",選擇server和fegin的依賴;

application.yml相關配置:
spring:
application:
name: service-user-client-fegin
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
feign:
hystrix:
enabled: true
項目主類EurekaBussnissServiceUserClientFeginApplication,添加@EnableEurekaClient和@EnableFeignClients注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaBussnissServiceUserClientFeginApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaBussnissServiceUserClientFeginApplication.class, args);
}
}
我們以eureka-bussniss-service-user的服務例。在fegin項目中定義一個接口"UserFeignClient"
/**
* 標明feign調用的微服務名稱
*/
//通過@ FeignClient(“服務名”),來指定調用哪個服務。
// 比如在代碼中調用了service-hi服務的“/hi”接口,還可以使用url參數(shù)指定一個URL
// fallback 出現(xiàn)錯誤回調類
@FeignClient(name = "service-user",fallback = UserFallback.class)
public interface UserFeignClient {
/**
* 對應service-user微服務中的URL
* @return
*/
@GetMapping("/listUsers")
String listUsers();
}
接著,創(chuàng)建一個Controller來實現(xiàn)對Fegin客戶端的調用,使用@Autowired自動注入上面的“UserFeignClient ”實例。并且通過方法實現(xiàn)對service-user的服務發(fā)起調用。
@RestController
public class UserFeignApi {
/**
* 將剛才定義的userFeignClient注入,并當成普通的接口調用即可
*/
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/listUsersByFeign")
public String ListUsers(){
String users = this.userFeignClient.listUsers();
return users;
}
}
方式測試fegin的負載均衡以及服務容錯保護的功能,我們創(chuàng)建了一個UserFallback實現(xiàn)UserFeignClient。實現(xiàn)接口請求錯誤的反饋
@Component
public class UserFallback implements UserFeignClient {
@Override
public String listUsers() {
return "服務調用失敗";
}
}
包路徑截圖

到這里就已經(jīng)基本完成了,依次啟動service-user(8802,8803兩個端口)、fegin。

訪問fegin項目的地址http://localhost:9001/listUsersByFeign


重復請求,會發(fā)現(xiàn)接口數(shù)據(jù)是依次返回8802和8803的數(shù)據(jù)的。
現(xiàn)在把其中一個service-user服務停掉(8803),一開始當請求負載到8803這個服務實例時,因為當前的服務已經(jīng)停掉了,所以接口響應顯示了我們實現(xiàn)了UserFallback 類的返回。

再過幾秒鐘后,我們繼續(xù)請求會發(fā)現(xiàn),接口已經(jīng)全部負載到了8802的服務實例了。

所以可以看到fegin已經(jīng)實現(xiàn)了Ribbon和Hystrix的功能了。
下一篇我們將實現(xiàn)spring cloud config分布式配置中心的組件。