【spring cloud 第六篇】feign 中使用熔断器


Feign的起步依赖中已经引入了Hystrix的依赖,所以在Feign中使用Hystrix不需要引入其他依赖,只需要在application.yml中配置如下:
feign.hystrix.enabled = true,开启熔断机制,默认是false;

该demo在【spring cloud 第四篇】声明式调用 Feign
进行改造:

1 需要修改的文件

  • application.yml 配置文件
  • MyFeignService.java 类
  • MyEurekaFeignClient.java
  • 新增一个 MyHystrix.java 文件,并实现MyEurekaFeignClient
    如下如:
    在这里插入图片描述

1.1 application.yml

  • feign.hystrix.enabled = true,开启熔断机制
  • yml 文件中没有该提示,是IDEA的问题,不用理会
feign:
  hystrix:
    enabled: true   # 文件中没有提示,不影响

1.2 MyEurekaFeignClient

  • 在@FeignClient的注解的fallback配置加上快速失败的处理类(该处理类是Feign熔断器的逻辑处理类,必须实现被@FeignClient修饰的接口)
  • 本案例中的 MyHystrix就是实现了MyEurekaFeignClient

/**
 * 添加 fallback = MyHystrix.class
 */
@FeignClient(value = "eureka-client-4",configuration = MyFeignConfig.class,fallback = MyHystrix.class)
public interface MyEurekaFeignClient {

    /**
     * 调用 eureka-client-4 服务的getPort接口
     * @PathVariable(name = "name")中的"name"必须要写,并且与eureka-client-4 服务的getPort接口对应
     */
    @GetMapping(value = "/getPort/{name}")
    public String getPortForEurekaClient(@PathVariable(name = "name") String name);

}

1.3 新建 MyHystrix

  • MyHystrix 必须实现MyEurekaFeignClient ,MyEurekaFeignClient 是被- @FeignClient注解修饰的类
  • MyHystrix 需要添加@Component注解,注入到ioc容器中
@Component
public class MyHystrix implements MyEurekaFeignClient {

    @Override
    public String getPortForEurekaClient(String name) {
        return "测试feign结合hystrix-error>:"+name;
    }
}

1.4 MyFeignService服务类

@Service
public class MyFeignService {

/*    @Autowired
    private MyEurekaFeignClient myEurekaFeignClient;
    */
    @Autowired
    private MyEurekaFeignClient myHystrix;

    public String getPort(String name) {
//        return myEurekaFeignClient.getPortForEurekaClient(name);
        return myHystrix.getPortForEurekaClient(name);
    }
}

1.5 查看结果

  • 启动 eureka-server 和 eureka-client,再启动eureka-feign-client
    访问http://localhost:8761/ 如下图:
    在这里插入图片描述

访问http://localhost:8766/myFeign/getPort/feign测试,返回正常

2020-09-17 18:11:10---feign测试-8763

关闭eureka-client服务继续访问 http://localhost:8766/myFeign/getPort/feign测试 结果返回如下:

2020-09-17 18:12:57---测试feign结合hystrix-error>:feign测试

由此可见,当被调用的服务不可用时,当前服务会进入fallback的逻辑处理类(即MyHystrix ),由这个类来执行熔断器打开是的处理逻辑

2 feign中使用hystrix dashboard

pom文件添加依赖

  • 和 ribbon集成hystrix dashboard类似,需要在pom文件中添加actuator、hystrix和hystrix dashboard的起步依赖。
  • 有的人可能会有疑惑:feign自带hystrix,为什么还要加入spring-cloud-starter-hystrix,因为feign自带的hystrix的依赖不是起步依赖
<!--feign中使用hystrix dashboard相关依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.4.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

修改启动类

  • 添加@EnableHystrixDashboard 开启监控熔断器状态
  • 注入 ServletRegistrationBean
@EnableHystrixDashboard   // 开启监控熔断器状态
public class EurekaFeignClientApplication
{

    public static void main(String[] args) {
        SpringApplication.run(EurekaFeignClientApplication.class,args);
    }

    @Bean
    public ServletRegistrationBean getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

查看结果,

  • 查看hystrix dashboard和 ribbon集成hystrix dashboard查看结果一样 3.3 demo
  • 依次启动工程 eureka-server,eureka-client,eureka-feign-client,在浏览器访问http://localhost:8767/hystrix.stream,在调用http://localhost:8767/myFeign/getPort/熔断监控测试,打印熔断器的数据指标如下:
    在这里插入图片描述
  • 再访问http://localhost:8767/hystrix,依次填写http://localhost:8767/hystrix.stream、2000、恰锅锅(这个随意填写)
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值