笔记:Spring Cloud Hystrix 服务容错保护

由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪。

在微服务架构中,存在着大量的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定,为了解决这样的问题,产生了断路器等一系列的服务保护机制。

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待,这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

针对上述问题,Spring Cloud Hystrix 实现了断路器、线程隔离等一系列服务保护功能,下面展示通过断路器实现服务的保护,需要启动我们之前创建的服务注册中心、hello-service 服务和consumer-helloservice 工程,在没有加入断路器之前,关闭 hello-service 服务,在 consumer-helloservice 进行访问 hello-service 时,会出现如下的输出:

Type Exception Report

Message java.lang.IllegalStateException: No instances available for ORG.DRSOFT.WEBSERVICE.HELLONAMESERVICE

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

javax.servlet.ServletException: java.lang.IllegalStateException: No instances available for ORG.DRSOFT.WEBSERVICE.HELLONAMESERVICE

org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)

org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)

org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)

org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)

。。。。。。

下面我们来增加断路器对服务进行保护:

  • 在 consumer-helloservice 工程的 pom.xml 中增加 spring-cloud-starter-hystrix 的依赖:

    <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-hystrix</artifactId>

    </dependency>

  • 在 consumer-helloservice 工程的主类 ConsumerHelloserviceApplication 中使用 @EnableCircuitBreaker 注解开启断路器功能:

    @EnableCircuitBreaker

    @EnableDiscoveryClient

    @SpringBootApplication

    public class ConsumerHelloserviceApplication {

    ?
    ?

    ????????public static
    void
    main(String[] args) {

    ????????????????SpringApplication.run(ConsumerHelloserviceApplication.class, args);

    ????????}

    ?
    ?

    ????????@Bean

    ????????@LoadBalanced

    ????????public RestTemplate restTemplate() {

    ??????????????return new
    RestTemplate();

    ????????}

    }

  • 改造服务消费方式,在服务调用类增加 @Service 注解,在服务调用的方法中增加 @HystrixCommand 注解,并增加参数 fallbackMethod 设置服务调用失败的方法名称(需要和调用服务方法的参数一致)

    @HystrixCommand (fallbackMethod = "helloFallback")

    ????????????public String hello(){

    ????????????????return restTemplate.getForEntity("http://hello-service/hello/get",String.class).getBody();

    ????????????}

    ?
    ?

    public String helloFallback(){

    ????????????return"error";

    }

  • 关闭 hello-service 服务,在 consumer-helloservice 进行访问 hello-service,就会出现 "error "的返回
时间: 2024-10-25 06:03:13

笔记:Spring Cloud Hystrix 服务容错保护的相关文章

Spring Cloud Hystrix - 服务容错

服务容错和Hystrix 在微服务架构中,由于某个服务的不可用导致一系列的服务崩溃,被称之为雪崩效应.所以防御服务的雪崩效应是必不可少的,在Spring Cloud中防雪崩的利器就是Hystrix,Spring Cloud Hystri是基于Netflix Hystrix实现的.Hystrix的目标在于通过控制那些访问远程系统.服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力.Hystrix 具备服务降级.服务容错.服务熔断.线程和信号隔离.请求缓存.请求合并以及服务监控等强大功能.

第五章 服务容错保护:Spring Cloud Hystrix

在微服务架构中,我们将系统拆分为很多个服务,各个服务之间通过注册与订阅的方式相互依赖,由于各个服务都是在各自的进程中运行,就有可能由于网络原因或者服务自身的问题导致调用故障或延迟,随着服务的积压,可能会导致服务崩溃.为了解决这一系列的问题,断路器等一系列服务保护机制出现了. 断路器本身是一种开关保护机制,用于在电路上保护线路过载,当线路中有电器发生短路时,断路器能够及时切断故障电路,防止发生过载.发热甚至起火等严重后果. 在分布式架构中,断路器模式的作用也是类似的. 针对上述问题,Spring

Spring Cloud 八:服务容错保护(Hystrix断路器)【Dalston版】

断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,"断路器"能够及时的切断故障电路,防止发生过载.发热.甚至起火等严重后果. 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),直接切断原来的主逻辑调用.但是,在Hystrix中的断路器除了切断主逻辑的功能之外,还有更复

Spring Cloud(四):服务容错保护 Hystrix【Finchley 版】

Spring Cloud(四):服务容错保护 Hystrix[Finchley 版] 发表于 2018-04-15 |  更新于 2018-05-07 | 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况,这种现象被称为服务雪崩效应.为了应对服务雪崩,一种常见的做法是手动服务降级.而 Hystrix 的出现,给我们提供了另一种选择. Hystrix [h?st'r?ks] 的中文含义是 "豪猪",豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与 Hy

Spring Cloud构建微服务架构 服务容错保护(Hystrix断路器)【Dalston版】

前言 在前两篇<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>和<Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)>中,我们对Hystrix提供的服务降级和依赖隔离有了基本的认识.下面我们将继续说说Hystrix的另外一个重要元件:断路器. 断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生

第五章 服务容错保护: Spring Cloud Hystrix

在微服务架构中, 存在着那么多的服务单元, 若一个单元出现故障, 就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定.为了解决这样的问题, 产生了断路器等一系列的服务保护机制 Spring Cloud Hystrix实现了断路器. 线程隔离等一系列服务保护功能.它也是基于Netflix的开源框架Hystrix实现的, 该框架的目标在于通过控制那些访问远程系统. 服务和第三方库的节点, 从而对延迟和故障提供更强大的容错能力.Hystrix具备服务降级. 服

Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)

动手试一试 在开始使用Spring Cloud Hystrix实现断路器之前,我们先拿之前实现的一些内容作为基础,其中包括: eureka-server工程:服务注册中心,端口:1001 eureka-client工程:服务提供者,两个实例启动端口分别为2001 下面我们可以复制一下之前实现的一个服务消费者:eureka-consumer-ribbon,命名为eureka-consumer-ribbon-hystrix.下面我们开始对其进行改在: 第一步:pom.xml的dependencies

SpringCloud---服务容错保护---Spring Cloud Hystrix

1.概述 1.1 在分布式架构中,存在着许多的服务单元,若一个单元出现故障,很容易因依赖关系引发故障的蔓延,最终导致整个系统的瘫痪: 为了解决这样的问题,产生了断路器等服务保护机制: 1.2 分布式架构中,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间等待,这样不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延: 1.3 Spring Cloud Hystrix实现了断路器.线程隔离等一系列服务保护功能: 基于Netflix的开

六、服务容错保护(Hystrix服务降级)

1.简介 在微服务架构中,我们将系统拆分成立一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程间运行,依赖通过远程调用的方式执行,这样就可以因为网络原因或者依赖服务自身问题出现调用故障或延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务的积压,线程资源无法释放,最终导致自身服务的瘫痪,进一步甚至出现故障的蔓延导致整个系统的瘫痪.如果这样的架构存在如此严重的隐患,那么相较于传统的架构就会更加的不稳定.为了解决这样的问题,就产生