欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud Hystrix断路器(四)

程序员文章站 2022-07-05 18:43:45
...

前言

在微服务场景中,通常会有很多层的服务调用。如果一个底层服务出现问题,故障会被向上传播给用户。我们需要一种机制,当底层服务不可用时,可以阻断故障的传播。这就是断路器的作用。他是系统服务稳定性的最后一重保障。

常常会遇到正在使用某个系统,点击到某一个功能的时候显示该模块正在升级或者请稍后查看等。怎么实现呢??

使用Feign整合Hystrix

默认是不开启的,需要修改配置文件application.yml,添加下面的代码

feign:
  hystrix:
    #开启Hystrix熔断,默认false
    enabled: true

新增支付模块熔断器

/**
 * @ Description   :  支付模块熔断器
 * @ Author        :  GMaya
 * @ CreateDate    :  2020/3/18 9:35
 * @ Version       :  1.0
 */
@Component
public class PayClientFallBack implements PayClient {
    @Override public String getPay() {
        return "支付模块正在抢修,请稍后!" +" :feign演示";
    }
}

Spring Cloud Hystrix断路器(四)
修改PayClient接口

@FeignClient(name = "pay",fallback = PayClientFallBack.class) // 服务名称

启动服务端,启动pay客户端,启动order客户端。
访问http://localhost:8082/getOrder
Spring Cloud Hystrix断路器(四)
然后把pay客户端关掉!
Spring Cloud Hystrix断路器(四)

使用RestTemplat整合Hystrix

pom添加j依赖

        <!--熔断器-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

启动类新增注解

@EnableCircuitBreaker

或者

@aaa@qq.comaaa@qq.com
也可以使用@SpringCloudApplication 一个顶替仨

SpringCloudApplication注解 源码:
Spring Cloud Hystrix断路器(四)

修改订单接口

/**
 * @ Description   :  订单接口接口
 * @ Author        :  GMaya
 * @ CreateDate    :  2020/3/16 11:03
 * @ Version       :  1.0
 */
@RestController
public class OrderController {

//    @Autowired
//    private PayClient payClient; // 注入支付模块服务

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/getOrder")
    @HystrixCommand(fallbackMethod = "getRestTemplateFallBack")
    public String getOrder(){
        String pay = restTemplate.getForObject("http://pay/getPay", String.class);
        //        String pay = payClient.getPay();
        return pay;
    }

    private String getRestTemplateFallBack(){
        return "不好啦,机房着火了,restTemplate演示!";
    }
}

Spring Cloud Hystrix断路器(四)
当然,当接口多的时候,还可以改造

/**
 * @ Description   :  订单接口接口
 * @ Author        :  GMaya
 * @ CreateDate    :  2020/3/16 11:03
 * @ Version       :  1.0
 */
@RestController
@DefaultProperties(defaultFallback = "defaultFallback")
public class OrderController {

//    @Autowired
//    private PayClient payClient; // 注入支付模块服务

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/getOrder")
//    @HystrixCommand(fallbackMethod = "getRestTemplateFallBack")
    @HystrixCommand // 使用默认熔断,加一个注解就行
    public String getOrder(){
        String pay = restTemplate.getForObject("http://pay/getPay", String.class);
        //        String pay = payClient.getPay();
        return pay;
    }

    private String getRestTemplateFallBack(){
        return "不好啦,机房着火了,restTemplate演示!";
    }

    private String defaultFallback(){
        return "默认熔断!";
    }
}

Spring Cloud Hystrix断路器(四)
重启查看

Spring Cloud Hystrix断路器(四)
最后:
额外配置,如需更多,请查看专业解释

如果设置和默认值一样,没必要写出来配置

feign:
  hystrix:
    #开启Hystrix熔断,默认false
    enabled: true
hystrix:
  command:
    # 全局设置
    default:
      execution:
        isolation:
          # 命令执行超时时间,默认1000ms,只在线程池隔离中有效。
          thread:
            timeoutInMilliseconds: 1000
            # 发生超时是是否中断,默认true,只在线程池隔离中有效。
            interruptOnTimeout: true
        # 执行是否启用超时,默认启用true,只在线程池隔离中有效。
        timeout:
          enabled: true

相关标签: 后端开发

上一篇: 再抽两次

下一篇: 秀一把存在感