controller層調用的service接口,用了@FeignClient註解,FeignClient是服務調用,把客戶端與服務器端注入eureka,來調用我們的服務器端的接口,fallback的是繼承HystrixService 類爲其設計的fallback處理邏輯,避免代碼耦合
調用接口異常返回:
邏輯方法返回單獨處理
yml(消費者):
server:
port: 80
eureka:
client:
register-with-eureka: false #表示是否將自己註冊進Eurekaserver默認爲true。
fetch-registry: true #是否M從Eurekaserver抓取已有的註冊信息,默認爲true。單節點無所謂,集羣必須設置爲true才能配合ribbon使用負載均衡
service-url:
defaultZone: http://localhost:7001/eureka
feign:
hystrix:
enabled: true
service接口(openfegin):
@FeignClient(value = "CLOUD-PROVEIDER-USER", fallbackFactory = UserServiceFallbackFactory.class)
@Component
public interface UserService {
@GetMapping("/selectId/{id}")
String selectId(@PathVariable("id") Long id);
}
service實現類(openfegin):
@Component
public class UserServiceFallbackFactory implements FallbackFactory<UserService> {
@Override
public UserService create(Throwable throwable) {
return (id) -> "hystrx 斷路成功";
}
}
總結:
- @FeignClient(value = “CLOUD-PROVEIDER-USER”, fallbackFactory = UserServiceFallbackFactory.class)
- @Component**
綜合總結:
- 控制類HystirxController上DefaultProperties註解默認fallback
- 控制層執行方法SingleHystirxController上HystrixCommand註解單獨設置的fallback
- 調用service方法@FeignClient(fallback = FallbackService .class)
fallback優先顯示:
運行時異常 < 超時 < 宕機