springcloud系列17——Feign的Hystrix支持

Feign的Hystrix支持

springcloud官方文档参考:17.4 Feign Hystrix Support.

如果Hystrix在类路径上并且feign.hystrix.enabled = true,Feign将用断路器包装所有方法。

如果只是想某个Feign Client禁用Hystrix,可以创建一个普通的Feign.Builder,并将scope设置为prototype。

例如:

@Configuration
public class FooConfiguration {
    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder() {
        return Feign.builder();
    }
}

Feign Hystrix的回退(fallbacks)

Hystrix支持回退的概念:当断路器打开或出现错误时将执行默认的代码路径。 要为给定的@FeignClient启用回退,请将fallback属性设置为实现回退的类名称。 您还需要将您的实现声明为Spring bean。

示例代码:
这里以movie模块修改,新的模块名为microservice-springcloud-movie-feign-with-hystrix。

1.为Feign启用hystrix

修改application.yml

feign:
  hystrix:
    enabled: true

2.编写FeignClient,并设置fallbacks

@FeignClient(name = "microservice-springcloud-user",fallback = UserHystrixClientFallback.class)
public interface UserFeignClient {
    @RequestMapping(value = "/sample/{userId}", method = RequestMethod.GET)
    User findUserById(@PathVariable("userId") Long userId);
}

3.创建回退类

@Component
public class UserHystrixClientFallback implements UserFeignClient
{
    @Override
    public User findUserById(Long userId)
    {
        User user = new User();
        user.setId(0L);
        return user;
    }
}

4.测试

1.启动Eureka Server;
2.启动User服务;
3.启动microservice-springcloud-movie-feign-with-hystrix。

启动后,浏览器访问/user/1,得到正确响应。将user服务关闭,连续刷新20次以上,再次访问得到的结果是user的id为0,即我们的Fallback类中实现的方法。结果与springcloud系列15——hystrix简介及简单代码示例一节的一致。

代码结构:

这里要注意代码结构,否则在启动时会出现一些问题。
应用启动类如下:

@SpringBootApplication
@ComponentScan({"com.tommy.springcloud","com.tommy.config.fallback"})
@EnableFeignClients("com.tommy.config.feign")
public class MovieAppWithFeignAndHystrix
{
    public static void main( String[] args )
    {
        SpringApplication.run(MovieAppWithFeignAndHystrix.class,args);
    }
}

springboot扫描的类要与feign的分开。同时Fallback的类也要被springboot扫描到。

你可能感兴趣的:(Spring,Cloud,SpringCloud入门)