当前位置: 代码迷 >> 综合 >> SpringCloud(二):熔断器Hystrix
  详细解决方案

SpringCloud(二):熔断器Hystrix

热度:63   发布时间:2023-10-19 02:01:52.0

1. 雪崩效应

在微服务架构中,系统会根据业务来拆分成一个个的服务,多个服务之间可以相互调用。

由于网络或者自身原因,服务并不能保证完全可用。当单个服务出故障时,调用这个服务就会出现线程阻塞并且会出现级联阻塞,进而出现整个系统不可用的情况,这种现象被称为服务雪崩效应。

从别处找了一个方便理解的例子如下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。

SpringCloud(二):熔断器Hystrix

 

 

2. 熔断器

熔断器就是为了解决雪崩效应而被提出的模型。

熔断器的原理很简单,如果它在一段时间内侦测到许多类似的错误超过一定比例(默认50%),会将异常服务的调用快速响应失败不再阻塞等待。熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。

3. Hystrix

Hystrix具有熔断器、fallback的机制。fallback是指当请求服务出现异常的时候, 可以使用fallback方法返回的值.。fallback方法的返回值一般是设置的默认值或者来自缓存。

Feign中已经依赖了Hystrix,是自带熔断器的,所以不需要在maven配置文件中再次依赖Hystrix。

注意:熔断器作用于服务调用方,即服务消费方。

4. Feign中熔断器的使用实例

继上篇文章demo2中做熔断器的添加 https://blog.csdn.net/qq_34896887/article/details/82789083

1)application.properties中设置启用熔断器

feign.hystrix.enabled=true


2)创建回调类HelloFallback,需要实现HelloRemote接口,并注入到IOC容器中

@Component
public class HelloFallback implements HelloRemote {

    @Override
    public String sayHello(String name) {
        return "hello "+name+",System error, please contact the administrator!";
    }

}

3)在消费接口HelloRemote上增加fallback

@FeignClient(name= "demo1",fallback = HelloFallback.class)
public interface HelloRemote {
    @RequestMapping(value="/hello",method=RequestMethod.GET)
    public String sayHello(@RequestParam(value="name") String name);
}

5. 测试

1) 启动注册中心 sbc-server

2) 启动服务消费方 demo2 

3) 浏览器访问:http://localhost:8092/hello/su,由于没有启动服务提供方,会如下错误

SpringCloud(二):熔断器Hystrix

4)启动服务提供方 demo1 ,重新访问http://localhost:8092/hello/su

SpringCloud(二):熔断器Hystrix

 

 

  相关解决方案