SpringCloudAliBaba篇 之 Hystrix (介绍及简单使用示例)

简介: SpringCloudAliBaba篇 之 Hystrix

1、介绍

     当使用微服务架构时,由于服务间的调用关系错综复杂,难以避免的出现了分布式系统中的故障和延迟。为了保证系统的可用性和稳定性,我们需要在服务之间添加一些保护措施,比如熔断、降级、限流等。

Hystrix是Netflix开源的一种容错框架,主要是为了解决复杂分布式系统中服务之间的网络延迟、超时、故障等问题,达到快速失败并迅速恢复的效果,从而提高整个分布式系统的可用性和稳定性。Spring Cloud Alibaba集成了Hystrix,提供了丰富的注解和配置,可以轻松实现服务的熔断和降级。

2、什么是服务熔断与降级?

2.1  目的:

     服务熔断和降级是微服务架构中常用的容错机制,主要为了保证系统的可用性和稳定性。

2.2  服务熔断:

     在分布式系统中,当某个服务或者系统出现异常或者故障时,通过断路器(Circuit Breaker)自动切换到备选方案,暂时屏蔽不可用服务的调用请求,防止由于某个服务的故障导致整个系统的崩溃。当服务恢复正常后,断路器会自动恢复,继续提供服务。

2.3  服务降级:

     在高并发流量过载、系统资源不足等情况下,通过牺牲部分功能来保证核心功能的正常运行。当系统负载达到一定程度时,可以关闭某些非关键性服务,或者返回一个固定的响应结果,从而减轻系统的压力。当系统负载下降时,再逐步开启这些被降级的服务。

       服务熔断和降级虽然都是为了保证系统的可用性和稳定性,但是它们的触发条件和处理方式有所不同。服务熔断主要针对服务的失效或超时等异常情况,通过断路器来控制服务的调用流量;而服务降级主要针对资源紧张、高并发压力等情况,通过牺牲部分服务来保证核心功能的正常运行。使用服务熔断和降级机制可以有效地避免因为某一个服务的故障或异常导致整个系统的崩溃,提高系统的稳定性和可用性。

3、如何使用?

3.1 在你的pom.xml文件中添加Hystrix依赖

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

3.2 在启动类上添加@EnableCircuitBreaker注解,以启用Hystrix断路器

@SpringBootApplication
@EnableCircuitBreaker
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

3.3 yml 文件配置 (不强制,根据实际情况修改)

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000 
    //配置Hystrix断路器的超时时间
可以通过设置hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds属性来配置Hystrix断路器的超时时间,单位为毫秒。例如,下面的配置将Hystrix的超时时间设置为5000毫秒:

3.4 例子

注意: 在需要进行容错处理的方法上,添加@HystrixCommand注解,并指定fallbackMethod属性,以指定故障发生时调用的备选方法。

例如,下面是一个 RestController ,使用Hystrix熔断器来保护对  /orders/{id}  的调用:

@RestController
public class OrderController {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    private OrderService orderService;
    @GetMapping("/orders/{id}")
    @HystrixCommand(fallbackMethod = "fallbackMethodForGetOrderById")
    public Order getOrderById(@PathVariable Long id) {
        logger.info("Getting order with id {}", id);
        return orderService.getOrderById(id);
    }
    public Order fallbackMethodForGetOrderById(Long id, Throwable ex) {
        logger.warn("Fallback method called for getOrderById with id {} : {}", id, ex.toString());
        return null;
    }
}

讲解:

在上面的代码中,@HystrixCommand注解告诉Hystrix 为 /order/{id} 方法配置熔断器,并指定了一个名为“fallbackMethodForGetOrderById”的备选方法。如果 /order/{id} 方法抛出异常或超时,Hystrix将调用备选方法,并返回备选方法返回的结果。

总的来说,整合Hystrix非常简单,只需要添加依赖、启用注解和使用@HystrixCommand注解就可以了。不过需要注意的是,Hystrix已经停止维护了,如果你想要使用更先进的容错技术,可以考虑使用Resilience4j等其他库。



目录
相关文章
|
监控 Java 微服务
16SpringCloud - 断路器项目示例(Hystrix Dashboard)
16SpringCloud - 断路器项目示例(Hystrix Dashboard)
56 0
|
Java Spring
15SpringCloud - 断路器项目示例(Feign Hystrix)
15SpringCloud - 断路器项目示例(Feign Hystrix)
51 0
|
监控 Java
14SpringCloud - 断路器项目示例(Ribbon Hystrix)
14SpringCloud - 断路器项目示例(Ribbon Hystrix)
54 0
|
JSON Dubbo 网络协议
分布式RPC框架Dubbo实现服务治理实用示例:集成Kryo实现高速序列化,集成Hystrix实现熔断器
本文在熟悉远程RPC服务调用的基础上,详细说明了Dubbo框架实现服务治理的实用的示例,Dubbo和Kryo集成可以实现高速序列化,Dubbo和Hystrix集成可以实现服务熔断,可以在生产端和消费端使用熔断器实现服务熔断的功能,集成Hystrix的框架可以通过Hystrix仪表盘实现对远程RPC调用的服务的治理。最后重点讲述了Hystrix的相关的实用分析。通过这篇文章,可以熟悉并会使用服务的熔断机制。
348 0
分布式RPC框架Dubbo实现服务治理实用示例:集成Kryo实现高速序列化,集成Hystrix实现熔断器
|
Java 开发工具 Maven
spring-cloud:Hystrix熔断的使用示例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCloud-learn-demo/tree/master/spring-cloud-hystrix .
1215 0
|
监控 Java 开发工具
spring-cloud:熔断监控Hystrix Dashboard和Turbine的示例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCloud-learn-demo/tree/master/spring-cloud-hystrix-dashboard-turbine .
1061 0
|
6月前
springCloud之服务降级熔断Hystrix、OpenFeign
springCloud之服务降级熔断Hystrix、OpenFeign
351 0
|
7月前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
66 2
|
3月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
180 23
|
3月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
56 3