1. 程式人生 > >微服務springcloud—通過Fallback Factory檢查回退原因

微服務springcloud—通過Fallback Factory檢查回退原因

通過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微服務架構實戰》