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日

相关文章

  • Ubuntu20.04安装cuda10.1的步骤(图文教程)

    下面是Ubuntu20.04安装cuda10.1的步骤详细攻略: 1. 准备工作 操作系统:Ubuntu 20.04 显卡驱动:建议使用官方推荐驱动或更高版本 CUDA版本:CUDA 10.1 2. 下载并安装CUDA Toolkit 首先从Nvidia官网上下载CUDA Toolkit 10.1,可以通过WGET命令或浏览器下载,这里以WGET命令为例: …

    人工智能概论 2023年5月24日
    00
  • python数字转对应中文的方法总结

    那么我将为您详细介绍如何将Python中的数字转换为对应的中文。 首先,我们可以用下面这个算法将阿拉伯数字转换为中文数字: 构建阿拉伯数字和中文数字的对应关系,包括数字0-9、10-12、100、1000、10000等; 将数字从右向左分组,每组包含4个数字; 对每组数字进行处理,首先判断是否包含0,如果有则不添加“零”;其次根据数值和组数确定数字的单位,例…

    人工智能概论 2023年5月25日
    00
  • 深入理解Python分布式爬虫原理

    深入理解Python分布式爬虫原理 在分布式爬虫中,一个爬虫任务被分成多个子任务,分发给多个节点执行,最终合并结果。Python分布式爬虫框架Scrapy已经内置了分布式爬虫功能,但是对于特定的需求,我们可能需要自己实现分布式爬虫。 分布式爬虫的原理 分布式爬虫的实现主要依赖于队列和节点间的通信。 节点1从队列中获取爬虫任务,爬取数据后将结果存储到队列中。节…

    人工智能概论 2023年5月25日
    00
  • Bootstrap实现登录校验表单(带验证码)

    实现Bootstrap登录校验表单(带验证码)需要遵循以下步骤: 1. 引入Bootstrap和jQuery库 在标签内引入Bootstrap和jQuery库: <head> <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-boot…

    人工智能概览 2023年5月25日
    00
  • python3.6的venv模块使用详解

    Python3.6的venv模块使用详解 什么是venv模块 在Python3.3中,引入了一个新的标准库venv,这个标准库封装了创建Python虚拟环境的功能。venv的全称是“Virtual Environments”,即虚拟环境。它是Python解释器的本地副本,用于解决应用程序不同版本之间的包依赖性问题。 在这个虚拟环境中,可以安装自己需要的第三方…

    人工智能概览 2023年5月25日
    00
  • 什么是python的id函数

    Python的id()函数是用于返回对象的唯一标识符的内置函数。每个对象在内存中都有一个唯一的身份标识符,这个标识符可以被用于比较不同对象之间的身份是否相同。在Python中,可以使用id()函数来获得对象的身份标识符。 下面是id()函数的格式和使用方法。 格式 id(object) 参数 object:要获取内存地址的对象,可选参数。 返回值 返回对象的…

    人工智能概览 2023年5月25日
    00
  • 在Django中动态地过滤查询集的实现

    在Django中,我们可以使用QuerySet对象来进行数据库操作,包括增删改查等。而有时候我们需要在查询的时候进行动态的过滤,通常是由用户选择输入不同的过滤条件导致的。 以下是在Django中动态地过滤查询集的实现的完整攻略: 步骤一:建立基础查询集 首先,我们需要建立一个基础的QuerySet对象,这个QuerySet对象是没有经过任何过滤的,可以通过以…

    人工智能概论 2023年5月25日
    00
  • 新手必备Python开发环境搭建教程

    新手必备Python开发环境搭建教程 简介 Python是一门非常流行的编程语言,在多数领域都有广泛的应用。Python的优势在于语法简洁明了,易于学习,同时也有非常强大的开源社区支持。在开始Python编程之前,需要先搭建Python的开发环境。本文将介绍如何在Windows和macOS系统中搭建Python开发环境。 Windows系统 下载Python…

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