`

spring cloud中使用hystrix实现回退

阅读更多

      在微服务架构中,我们的服务被拆分成多个微服务,每个微服务完成自己的职责,微服务之间通过rpc或http进行调用。这个时候我们就要确保我们的服务高可用,但谁也说不准我们的服务能永远快速的提供服务。假如现在发生了这个一种情况 A->B->C->D->E 即A服务调用B服务,B调用C服务,C调用D服务,D调用E服务,这个时候我们的E服务过载,响应速度特别慢,当并发高时,我们的请求就会堆积在E服务,E服务无法返回,导致请求堆积在D服务,以此类推,就会导致请求依次堆积在我们的这个调用链上,最终导致所有的服务都不可用,形成服务的雪崩。下面以一个简单的图来表示服务的雪崩。

 

 

为了解决以上问题,spring cloud中为我们提供了 hystrix 断路器来保护我们的应用程序。
    断路器机制hystrix存在三种状态:CLOSED、OPEN和HALF_OPEN。默认情况下为CLOSED,当一个服务在一定的时间内(metrics.rollingStats.timeInMilliseconds默认10s),请求次数达到了某个阀值(circuitBreaker.requestVolumeThreshold默认20次),并且错误率也达到了某个阀值(circuitBreaker.errorThresholdPercentage默认>50%),此时断路器变成了OPEN的状态,当断路器打开,过了一定的时间(circuitBreaker.sleepWindowInMilliseconds默认为5s)将会放行一个请求,此时变成HALF_OPEN状态,如果可以访问就变成CLOSED否则变成OPEN状态
    资源隔离hystrix为每个依赖都提供了一个线程池或信号量。当线程池满了之后,发往该依赖的请求会被直接拒绝,从而加速失败。

    注意: 进入fallback方法并不意味者断路器一定是打开的,请求失败、超时、被拒绝以及断路器打开时都会执行回退逻辑。

需求:

    1、在feign中使用hystrix
    2、在降级方法中获取到为什么进入了降级方法

代码结构:

    eureka-server
        |- 服务注册中心
    hystrix
        product-provider-8091
            |- 服务提供者
        product-consumer-feign-hystrix-8093
            |- feign 和 hystrix的整合
            feign
                fallback
                    ProductServiceFeignFallback(回退实现)
                    ProductServiceFeignFallbackFactory(可以获知为何进入回退)

 

代码实现

一、注册中心和服务提供者的实现(见下方的代码)

二、服务消费者(需要引入hystrix)

1、feign和hystrix引入

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

 2、启动方法上增加@EnableCircuitBreaker   注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class ApplicationProductConsumer8093 {

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

 3、配置文件中在feign中启动hystrix

feign:
  hystrix:
    enabled: true

 4、回退的实现,fallback的实现

   注意: fallbackFatory 需要注意的事项


 

5、控制层的写法

/**
 * 商品控制器
 *
 * @author huan.fu
 * @date 2018/5/30 - 16:52
 */
@RestController
@RequestMapping("product")
public class ProductController {

	@Autowired
	private ProductService01Feign productService01Feign;

	@Autowired
	private ProductService02Feign productService02Feign;

	/**
	 * 获取商品信息
	 *
	 * @param productId
	 * @return
	 */
	@GetMapping("/01/selectOne/{productId}")
	public Map<String, Object> select01ByProductId(@PathVariable String productId) {
		return productService01Feign.selectByProductId(productId);
	}

	/**
	 * 获取商品信息
	 *
	 * @param productId
	 * @return
	 */
	@GetMapping("/02/selectOne/{productId}")
	public Map<String, Object> select02ByProductId(@PathVariable String productId) {
		return productService02Feign.selectByProductId(productId);
	}
}

    /product/01/selectOne/{productId} ===>  fallback 回退

    /product/02/selectOne/{productId} ===>  fallbackFactory 回退,可以知道回退的原因

 

6、测试

     测试的服务启动者先启动,然后停止看效果。

 

完整代码

 https://gitee.com/huan1993/spring-cloud-parent/tree/master/hystrix

  • 大小: 49.2 KB
  • 大小: 225.8 KB
  • 大小: 58.6 KB
  • 大小: 683.3 KB
分享到:
评论

相关推荐

    15.Spring Cloud中使用Hystrix

    本文将深入探讨如何在Spring Cloud项目中集成并使用Hystrix,以及如何将其与Feign客户端结合。 首先,我们需要了解Hystrix的基本原理。Hystrix通过隔离请求,防止单个服务的故障蔓延至整个系统,避免雪崩效应。断路...

    spring cloud gateway配置Hystrix 熔断、限流、后台调用注意点.pdf

    Spring Cloud Gateway 中可以使用 Hystrix 来配置熔断。 在上面的代码中,我们可以看到使用 `f.hystrix(config -&gt; config.setName("accept")` 配置了熔断器,名为 "accept"。并且设置了回退 URI 为 "forward:/...

    springcloud hystrix 断路由

    在分布式系统中,服务间的调用异常处理是至关重要的,Spring Cloud Hystrix 就是为了解决这一问题而设计的。Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离服务间的调用,防止因某个服务的不稳定导致整个系统...

    SpringCloud10-Hystrix熔断器学习代码及指定默认的全局兜底方法

    这个标题"SpringCloud10-Hystrix熔断器学习代码及指定默认的全局兜底方法"揭示了我们要讨论的主题——如何使用Hystrix进行熔断操作,并配置全局的 fallback 方法来处理服务调用失败的情况。 Hystrix的工作原理基于...

    Spring Cloud(Hystrix)使用.zip

    本教程将通过分析`microservice-hystrix-dashboard`、`microservice-client`和`microservice-springcloud`这三个项目来深入理解Spring Cloud Hystrix的使用。 首先,`microservice-hystrix-dashboard`是Hystrix的...

    25-Spring Cloud断路器Hystrix1

    同时,在 FeignClient 接口中,使用 `@HystrixCommand` 注解指定 Fallback 类,确保在服务故障时能够正确地执行回退逻辑。 在上述示例中,当 Order Service 关闭时,Feign Service 通过 Hystrix 断路器检测到调用...

    springcloud hystrix的使用

    接下来,让我们详细探讨如何在Spring Cloud项目中使用Hystrix: 1. **引入依赖**:在`pom.xml`文件中添加Spring Cloud Hystrix的相关依赖。通常,这包括`spring-cloud-starter-netflix-hystrix`和`spring-cloud-...

    SpringCloud——断路器(Hystrix)

    在 Ribbon 中配置 Hystrix,你需要创建一个 HystrixCommand 或者 HystrixObservableCommand 类型的实例,然后在服务调用中使用它。这样,一旦服务调用失败,断路器会自动打开,避免后续请求继续失败。 例如,你可能...

    Spring Cloud 中文文档 参考手册 中文版2018

    Zuul也支持通过上传文件、禁用过滤器、设置Hystrix回退等功能。 在消息驱动方面,Spring Cloud Stream为消息中间件提供了统一的消息通信模式。它通过定义Binder抽象,提供持续发布-订阅、消费群体分区以及编程模型...

    Spring Cloud dalston 中文文档 参考手册

    Hystrix是Spring Cloud中提供的断路器组件,它能够帮助系统防止级联故障并提供回退机制。Hystrix仪表板提供了实时监控和指标流的功能。而Turbine则允许你聚合来自多个Hystrix客户端的监控信息。 Ribbon是客户端负载...

    springCloud_hystrix(断路由服务降级)

    下面详细介绍如何在 Spring Cloud 应用中使用 Hystrix 进行服务降级: 1. **导入 Maven 依赖** 要使用 Hystrix,首先需要在项目的 `pom.xml` 文件中添加相应的依赖: ```xml &lt;groupId&gt;org.springframework....

    Spring Cloud Hystrix

    总结来说,Spring Cloud Hystrix 通过断路器、线路隔离、回退策略等手段,增强了微服务架构的稳定性和容错性。通过实际项目中的集成示例,开发者可以更好地理解和运用这些概念,提升系统的整体性能和可靠性。

    30 道 Spring Cloud 面试题及答案.docx

    如果 firstPage method() 中的异常继续发生,则 Hystrix 电路将中断,并且员工使用者将一起跳过 firstPage 方法,并直接调用回退方法。 7. 什么是 Netflx Feign? Feign 是受到 Retrof、JAXRS-2.0 和 WebSocket ...

    spring-cloud-hystrix-feign(注册中心、member、feign-order).zip

    当Member服务出现故障或响应过慢时,Hystrix断路器会打开,避免进一步的请求涌向故障服务,转而执行预先定义的回退逻辑,如返回默认值或降级操作。 总结一下,"spring-cloud-hystrix-feign(注册中心、member、feign...

    spring cloud 实战教程

    书中会介绍如何使用Hystrix实现熔断、降级和回退策略。 此外,Spring Cloud Bus和Spring Cloud Data Flow也是重要的组成部分。Bus负责在微服务之间传递事件,而Data Flow则提供了数据流管理和部署的工具,简化了...

    springcloud+hystrix(服务降级).doc

    在Spring Cloud框架中,Hystrix是一个关键组件,它提供了服务容错管理和断路器模式的实现,以确保系统的稳定性和高可用性。服务降级是Hystrix的一个重要功能,它允许在服务出现故障或响应时间过长时,为客户端提供一...

    SpringCloud10-2 Hystrix整合Dashboard教程

    在本教程中,我们将深入探讨如何在Spring Cloud项目中整合Hystrix Dashboard,这是一个强大的工具,用于监控微服务架构中的断路器性能。Hystrix是Netflix开源的一个库,它为分布式系统提供了延迟和容错的基础设施,...

    SpringCloud Hystrix服务熔断.docx

    【SpringCloud Hystrix服务熔断】是Spring Cloud生态中的一种关键组件,它引入了断路器模式,用于处理微服务架构中可能出现的雪崩效应。断路器模式的核心思想是在服务之间设置“保险丝”,当某个服务出现故障时,...

    SpringCloud第3季2024.7z

    SpringCloud是微服务架构中的一个核心框架,它提供了一套完整的解决方案,用于构建分布式系统,如服务发现、负载均衡、断路器、API网关、数据流处理等。本资源"SpringCloud第3季2024.7z"很可能包含的是关于Spring...

    Spring Cloud 中文文档.pdf

    - **为路线提供 Hystrix 回退**:Zuul 可以与 Hystrix 配合使用,为路由提供回退机制。 #### Polyglot 支持 Sidecar - **Polyglot 支持 Sidecar**:Spring Cloud 支持多种语言的服务部署在同一系统中,Sidecar ...

Global site tag (gtag.js) - Google Analytics