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扫描到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值