SpringCloud-3

4.断路器

在微服务中,如果某台相互依赖的服务器发生故障、网络中断等问题,调用这个服务就会出现线程阻塞,同时大量的请求进来,容器内的线程资源也被消耗完毕,从而导致整个系统一系列的问题,这种效应被称作“雪崩效应”。

服务雪崩效应描述的是一种因服务提供者的不可用导致服务消费者的不可用,并将不可用逐渐放大的过程。

4.1 Hystrix断路器

Netflix的Hystrix类库实现了断路器模式,在microservice架构中有多个层的服务调用。一个低水平的服务群中一个服务挂掉会给用户导致级联失效。调用一个特定的服务达到一定阈值(在Hystrix里默认是5秒内20个失败),断路由开启并且调用没有成功的。开发人员能够提供错误原因和开启一个断路由回调。

其中,Hystrix是Netflix开源的微服务框架套件之一,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。

4.2 Ribbon引入Hystrix

  1. 准备工作:

    ①:依次启动Eureka、Discovery、Ribbon服务,然后访问Ribbon服务的地址,可以看到正常访问成功。

    image

    ②:关闭Discovery服务,再次访问Ribbon服务的地址,这时由于无法访问提供者的服务,Ribbon的界面会报错:

    image

    其中,可以清晰看到服务器连接拒绝,这样就造成服务器中断在这里。

  2. 引入Hystrix断路器:

    ①:将Ribbon工程复制一份,除了工程名、主类名、端口区分开,其他都不变(为了区分Ribbon引入Hystrix之前、之后的作用,所以重新创建一个Ribbon工程),在新的工程引入Hystrix依赖:



    org.springframework.cloud
    spring-cloud-starter-hystrix

    ②:在主类上添加开启断路器的注解(@EnableCircuitBreaker):

    image

    ③:新增Service类,在方法上使用注解来指定回调方法:

    image

    注:@HystrixCommand(fallbackMethod = "addServiceback"):如果访问此方法失败(被访问的服务出现故障),那么直接回调在注解中标注的方法进行回写,展示新的信息。

    ④:在rest中的Controller主类的对应方法,调用service的方法:

    image

    ⑤:配置信息(修改端口,为了区分Ribbon服务):

    image

    ⑥:验证断路器起到作用:

    依次启动Eureka服务、Discovery服务、RibbonHystrix断路器服务,然后访问断路器服务的地址:http://localhost:8323/add,服务器可以正常访问。

    停止Discovery服务,然后再访问地址:http://localhost:8323/add,会发现此时服务路发生断路,但是展现的信息为断路器服务提供的消息:

    image

    出现这样的提示,说明断路器起到应有的作用了!

你可能感兴趣的:(SpringCloud-3)