spring cloud学习(五)断路器Hystrix

简介

       断路器Hystrix是容错管理工具,作用是通过隔离、控制服务从而对延迟和故障提供更强大的容错能力。在微服务中,服务与服务之间的接口调用可能会出现问题。断路器可以在这个时候发挥作用

       隔离实现:Hystrix使用命令命令模式HystrixCommand包装依赖调用逻辑,每个命令在单线程中执行。可以配置超时阈值,在超过阈值时fallback逻辑。对每一次的调用结果,包括异常、拒绝、超时、短路执行时执行fallback(降级)逻辑。并且提供熔断器组件,可以自动运行或调用。

Hystrix断路器的依赖:

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

      启动类中使用@EnableCircuitBreaker ,开启熔断处理功能。

@SpringBootApplication
@EnableDiscoveryClient //表示Eureka的客户端
@EnableCircuitBreaker  //开启熔断处理功能
@EnableFeignClients
public class OrderserviceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderserviceApplication.class, args);
    }

    @Bean
    @LoadBalanced
    RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

      由于服务发现主要用的是RestTemplate@FeignClient两种方式的熔断处理。

RestTemplate熔断实现

       涉及的服务:eureka、order-service、product-service。在order-service中做熔断处理。调用product-service的接口

       RestTemplate的熔断处理主要是在服务调用的方法计入注解@HystrixCommand,并且指定(fallbackmethod)服务调用失败、超时时的处理方法。例如:

 @HystrixCommand(fallbackMethod = "productServiceFallback")
 public Object hystrixTest(){
     return restTemplate.getForEntity("http://product-service/product-service/hello", String.class).getBody();
}

public Object productServiceFallback(){
    return "product-service/hello接口调用失败";
}

       这样当调用其他的服务失败时,就会调用productServiceFallback()方法。

      测试以下,把eureka服务和其他两个服务都起起来。通过postman调用接口。

正常时:

现在把product-service停掉,再测试。可以看到,调用失败的时候就会调用熔断处理方法,返回指定内容。

FeignClient熔断实现

     @FeignClient的方法实现熔断处理。首先需要在注解中加入属性fallback。值为class,指定熔断处理的实现类。实现类实现了@FeignClient注释的接口。实现每一个方法,在接口调用失败时就会调用对应的方法。
例如写一个接口ProductServiceFeign.java
@FeignClient(name = "product-service", path = "/product-service", fallback = ProductServiceFeignHystrix.class)
public interface ProductServiceFeign {

    @RequestMapping(value = "/hello2", method = RequestMethod.GET)
    String hello();

    @RequestMapping(value = "/hello3", method = RequestMethod.POST)
    ReturnBean hello1(QueryBean bean);
}

写实现类ProductServiceFeignHystrix.java

@Component
public class ProductServiceFeignHystrix implements ProductServiceFeign {
    @Override
    public String hello() {
        return "/hello2 - 接口欧调用失败";
    }

    @Override
    public ReturnBean hello1(QueryBean bean) {
        ReturnBean returnBean = new ReturnBean();
        returnBean.setLocation( "product-service3接口代用失败,参数:" + JSONObject.toJSONString(bean));
        return returnBean;
    }
}

@FeignClient服务发现需要导入依赖。并在启动类中加入@EnableFeignClients,开启服务发现。

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

测试一下,正常的情况下。

停掉product-service,再测试。可以知道接口调用失败之后就会进入处理类。

以上就是RestTemplate和FeignClient的熔断处理简要实现。具体的例子我已经上传。需要的朋友可以看一下。

https://download.csdn.net/download/qq_34484062/12391514

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值