SpringCloud hystrix断路器与局部降级全面介绍

SpringCloud Hystrix断路器与局部降级全面介绍

什么是Hystrix断路器

  • Hystrix是Netflix发布的一款容错框架,用于处理分布式系统的延迟和容错问题。Hystrix在整合了SpringCloud项目之后,是同步、异步请求的断路器。
  • 断路器是对延迟和故障的容错,当请求后端服务出现链路故障、返回超时等,断路器会直接断开请求链路,避免系统被拖垮,同时还可以提供基于失败率的自动降级功能。

Hystrix使用步骤

  1. maven配置:

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

  1. 启动类加上注解@EnableCircuitBreaker

Hystrix核心组件

  1. 服务监控和容错的实现

  2. 注解@HystrixCommand:该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,当该方法发生异常时,会执行fallbackMethod指定的方法。

```java
@GetMapping("/hello")
@HystrixCommand(fallbackMethod = "fallback") //指定熔断方法
public String sayHello(@RequestParam String name){
restTemplate.getForObject("http://service-provider/hello?name=" + name,String.class);
}

//服务熔断后执行的方法
public String fallback(String name){
return "fallback: " + name;
}
```

  1. 监控仪表盘Hystrix Dashboard

  2. maven配置

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

  • 启动类上添加注解@EnableHystrixDashboard

Hystrix局部降级

如果只想让某些服务降级,可以通过配置文件设置Hystrix的默认降级处理逻辑,实现局部降级。

hystrix:
  command:
    #服务降级
    default:
      fallback.enabled: true
      fallback.method.name: error

如上面的配置,表示默认开启服务降级,fallback处理降级的情况。fallback处理方法名字为error,对应的方法需要在业务层面实现。

示例一

在微服务架构中A服务需要依赖B服务的接口,B服务是一个不稳定服务,经常出现请求超时错误,容易导致服务雪崩。使用Hystrix实现服务降级,避免因B服务错误导致A服务不可用。

  1. 在A服务调用B服务接口的方法上添加@HystrixCommand注解,并指定fallbackMethod处理降级情况。

```java
@GetMapping("/test")
@HystrixCommand(fallbackMethod = "fallback")
public String test(){
ResponseEntity result = restTemplate.getForEntity("http://service-b/hello", String.class);
return result.getBody();
}

//服务降级后处理的方法
public String fallback(){
return "Hello World from Service A -Fallback";
}
```

  1. 访问http://localhost:8080/test,此时因B服务未启动或接口超时,会执行降级方法,返回“Hello World from Service A -Fallback”。

  2. 控制台输出系统异常信息,正常情况下不应该出现服务A接口调用失败的信息。

示例二

当某个服务的某个方法不可用时,仅对该方法进行降级处理。

  1. 设置Hystrix默认降级处理策略,添加如下配置:

yaml
hystrix:
command:
default:
fallback.enabled: false

  1. 在需要降级处理的方法上添加@HystrixCommand注解,并设置对异常退回的处理方式,如下:

```java
@HystrixCommand(fallbackMethod="getFallback")
public User getUserById(String id) {
return restTemplate.getForObject("http://USER-SERVICE/user/{id}",User.class,id);
}

private User getFallback(String id) {
User user = new User();
user.setId(-1L);
user.setName("Default User");
return user;
}
```

如上面的代码,当getUserById方法调用异常,将会执行getFallback方法实现局部降级。

以上就是关于SpringCloud Hystrix断路器与局部降级的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud hystrix断路器与局部降级全面介绍 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • python django集成cas验证系统

    下面是关于 Python Django 集成 CAS 验证系统的详细攻略: 什么是CAS? CAS 即 Central Authentication Service,是由耶鲁大学发起的一个单点登录(SSO)协议。CAS 提供了一个认证中心,浏览器只需要认证一次,就可以在多个应用中共享认证信息,实现单点登录。 Django集成CAS步骤 安装 pip inst…

    人工智能概览 2023年5月25日
    00
  • python使用socket实现图像传输功能

    我会详细讲解“python使用socket实现图像传输功能”的完整攻略,下面是具体的步骤: 1. 创建服务器端代码 首先,在服务器端代码中需要完成以下操作: 1.1. 导入socket库 import socket 1.2. 创建socket对象 server_socket = socket.socket() 1.3. 绑定ip地址和端口号 server_s…

    人工智能概览 2023年5月25日
    00
  • 关于Django外键赋值问题详解

    下面我来为你详细讲解“关于Django外键赋值问题详解”。 1. 外键赋值问题 在Django中,使用外键关系需要赋值,通常情况下可以通过实例化对象、外键属性、id值等属性进行外键赋值,但在实际情况下可能会出现外键赋值失败的情况,这时需要注意以下几点: 确认外键关系是否正确 确认外键赋值数据是否正确 确认外键赋值方法是否正确 2. 关于外键赋值数据格式问题 …

    人工智能概论 2023年5月25日
    00
  • python中的三种注释方法

    当写Python代码时,我们需要在一些片段代码和特定表达式旁边添加一些注释。注释不会执行,而是为了方便代码的阅读和理解。Python提供了三种注释代码的方法。 单行注释 单行注释以井号(#)开始,直到行结束。单行注释通常在新行中独立写,也可以出现在代码行的后面。单行注释只针对一行代码进行注释。例如: # 这是一行单行注释 print("Hello,…

    人工智能概览 2023年5月25日
    00
  • python环境中的概念conda中与环境相关指令操作

    下面我会详细讲解“python环境中的概念conda中与环境相关指令操作”的完整攻略。 什么是conda环境? conda是一个用于管理和部署软件包的开源环境管理系统。在使用conda环境时,用户可以创建不同的独立环境,每个环境都可以有不同的软件包及其版本。这样就可以在同一台机器上使用不同的环境,而不会相互干扰。 常用指令 创建一个新的conda环境: 创建…

    人工智能概览 2023年5月25日
    00
  • 详解Python OpenCV图像分割算法的实现

    下面我将详细讲解“详解Python OpenCV图像分割算法的实现”的完整攻略。 前言 在进行图像处理时,图像分割是非常重要的一个步骤,它可以将图像中的像素按照其特征或者属性分为不同的区域,方便后续对图像的处理。Python OpenCV图像分割算法的实现是一个非常重要的话题。在本篇文章中,我们将讨论基于Python和OpenCV的图像分割算法的实现方法和步…

    人工智能概论 2023年5月24日
    00
  • C语言 fseek(f,0,SEEK_SET)函数案例详解

    C语言 fseek(f,0,SEEK_SET)函数案例详解 简介 在C语言中,fseek()函数用于移动指定文件流的文件指针。其中,文件指针是指向文件中特定位置的指针,以便读取或写入某个特定位置的数据。fseek()函数的原型如下: int fseek(FILE *stream, long int offset, int whence); 其中,stream…

    人工智能概览 2023年5月25日
    00
  • 用VBScript制作QQ自动登录的脚本代码

    初步准备:1.安装好VBScript的开发环境,例如Visual Studio或者Notepad++等;2.了解QQ登录的账号密码输入框的标签属性。 步骤一:新建VBScript项目在VBScript开发环境中,新建一个VBScript项目,用于编写自动登录QQ的脚本代码。 步骤二:添加必要的对象添加“Microsoft Internet Controls”…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部