微服務springcloud—通過Fallback Factory檢查回退原因
阿新 • • 發佈:2018-11-07
通過Fallback Factory檢查回退原因
需要了解回退的原因,此時可使用註解@FeignClient的fallbackFactory屬性。下面我們編寫一個示範,為Feign列印回退日誌。
1.複製專案microservice-consumer-movie-feign,將ArtifactId修改為microservice-consumer-movie-feign-hystrix-fallback-factory。
2.將UserFeignClient改為如下內容。
@FeignClient(value="users", fallbackFactory = FeignClientFallbackFactory. class)
public interface UserFeignClient {
@RequestMapping(value ="/{id}",method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
}
/**
*UserFeignClient的fallbackFactory類,該類需實現FallbackFactory介面,
* 並覆寫create方法
* The fallback factory must produce instances of fallback classes that
* implement the interface annototated by {@link FeignClient}.
*/
@Component
class FeignClientFallbackFactory implements FallbackFactory<UserFeignClient> {
private static final Logger LOGGER =
LoggerFactory.getLogger(FeignClientFallbackFactory.class);
@Override
public UserFeignClient create(Throwable cause){
return new UserFeignClient () {
@Override
public User findById(Long id) {
//日誌最好放在各個fallback方法中,而不要直接放在create方法中
//否則應用在啟動時,就會列印該日誌。
FeignClientFallbackFactory.LOGGER.info("fallback;reason was:", cause);
User user = new User();
user.setId(-1L);
user.setUsername("預設使用者");
return user;
}
};
}
這樣Feign發生回退時,就會列印日誌。
3.測試
1.啟動microservice-discovery-eureka。
2.啟動microservice-provider-user。
3.啟動microservice-consumer-movie-feign-hystrix-fallback-factory。
4.訪問http://localhost:8010/user/1,可正常獲得結果。
5.停止microservice-provider-user。
6.再次訪問http://localhost:8010/user/1,可獲得如下結果。
並且,控制檯會輸出類似如下的日誌。
說明進入了回退類中的回退方法。
本文大部分內容轉載自周立的《Spring Cloud與Docker微服務架構實戰》