通过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微服务架构实战》