微服务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,可获得如下结果。
微服务springcloud—通过Fallback Factory检查回退原因_第1张图片

并且,控制台会输出类似如下的日志。
微服务springcloud—通过Fallback Factory检查回退原因_第2张图片
说明进入了回退类中的回退方法。

本文大部分内容转载自周立的《Spring Cloud与Docker微服务架构实战》

你可能感兴趣的:(通过Fallback,Factory检查回退原因,springcloud,Hystrix)