Hystrix 熔断器

什么是熔断器?

Hystrix 是Netflix 公司开源的一个项目 它提供了熔断器功能 能够阻止分布式系统中出现联动故障 从而提高了整个分布式系统的弹性

 

为什么要用熔断器?

在分布式系统中 可能有几十个服务项目依赖 比如A服务的某些功能需要调用B服务 当A服务调用B服务的时候 B服务由于某些原因

例如 网络延迟 机房故障 等等  导致B服务不可用  如果不隔离B服务 会导致请求成为堵塞状态 A服务一直在等B服务的响应 严重的

话可能会使整个服务雪崩为了防止雪崩效应 因而产生了熔断器模型

 

 

Hystrix 设计原则

快速失败机制 如果某个服务发生故障 则调用该服务的请求快速失败

使用熔断机制,防止故障扩散到其他服务

提供回退方案 在请求发生故障时 提供设定好的回退方案 

 

 

案例

打开工程

 

 

 

添加依赖

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

 

启动类上新增@EnableHystrix注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class RibbonApp 
{
    @Bean
    // 加载负载均衡
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

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

 

修改controller代码

public class HiController {
    
    @Autowired
    RestTemplate restTemplate;
    //获取负载均衡提供者的信息
    @Autowired
    LoadBalancerClient loadBalancerClient;

    @RequestMapping("/hi/{name}")
  //处理回退 @HystrixCommand(fallbackMethod
= "hiError") public String home(@PathVariable String name){ String url = "http://EUREKA-CLIENT/hi/"+name; return restTemplate.getForEntity(url,String.class).getBody(); } public String hiError(String name){ return "hi error"; } }

 

依次启动

 

 

 

打开浏览器输入 http://localhost:8004/hi/ss

 

关闭

 

 

 再次刷新

 

 

 

 可以看到当eureka_client服务不可用后  开启了熔断器 进入了回调方法这样做的好处

 就是通过快速失败 请求能够得到及时处理,线程不再阻塞

 

Feign上使用熔断器

打开工程

 

 

 

配置文件新增

feign:
  hystrix:
    enabled: true

 

新建一个类


@Component
public class Error implements EurekaClientFeign{
    @Override
    public String sayHi(String name) {
        return "error";
    }
}

在@FeignClient注解上添加fallback

@FeignClient(value = "eureka-client",fallback = Error.class)
public interface EurekaClientFeign {
    @GetMapping(value = "/hi/{name}")
    String sayHi(@PathVariable(value = "name") String name);
}

 

依次启动

 

 

打开浏览器 输入 localhost:8080/test  可以访问8006服务

 

关闭eureka_client后 eureka-client不可用调用回调方法

                                                                                              

posted @ 2020-03-13 13:38  辰梓悦  阅读(118)  评论(0编辑  收藏  举报