从零学 spring cloud第8-5课:Hystrix断路器

    项目的DEMO代码:https://github.com/heyu52/-spring-cloud
    在微服务场景中,通常会有很多层的服务调用。如果一个底层服务出现问题,故障会被向上传播给用户。我们需要一种机制,当底层服务不可用时,可以阻断故障的传播。这就是断路器的作用。他是系统服务稳定性的最后一重保障。
    Hystrix也是Netflix套件的一部分。他的功能是,当对某个服务的调用在一定的时间内(默认10s,由metrics.rollingStats.timeInMilliseconds配置),有超过一定次数(默认20次,由circuitBreaker.requestVolumeThreshold参数配置)并且失败率超过一定值(默认50%,由circuitBreaker.errorThresholdPercentage配置),该服务的断路器会打开。返回一个由开发者设定的fallback。
我们还是在上一节的代码goodspo中进行修改。
增加引用

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

修改启动类,增加@EnableCircuitBreaker

package com.csdn.GoodsPO;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class GoodsPoApplication {

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

homeController 增加方法

 private final Random rnd = new Random(System.currentTimeMillis());
   @GetMapping("/findOrder/{orderNo}")
    @HystrixCommand(fallbackMethod = "findOrderFallback", commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
    })
    public String findOrder(@PathVariable String orderNo)  throws InterruptedException  {

        Thread.sleep(rnd.nextInt(2000));

        return "订单" + orderNo + " 找到啦!";

    }

    public String findOrderFallback(String orderNo) {
        return "订单查找失败!";
    }

这里设置的是当方法执行时间超过1秒时,就触发断路,直接执行方法findOrderFallback
这里要特别提醒,我设设置了网关的超时时间为以下的配置


#设置网关调用超时时间限制
zuul.host.connect-timeout-millis=60000
zuul.host.socket-timeout-millis=60000

ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000

因为它默认就是1秒,那我们的熔断就看不到效果了。
启动项目:http://127.0.0.1:8762/goodspo/findOrder/1,多次测试,会得到以下两个结果
在这里插入图片描述
在这里插入图片描述
这就是断路器的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值