微服务中的服务降级与熔断机制

news/2025/1/15 21:56:55/

目录:

    • 1、简介
    • 2、服务降级
      • 2.1. Hystrix基础配置
      • 2.2. 启用Hystrix
      • 2.3. 实现服务降级
      • 2.4. 配置Hystrix
    • 3、熔断机制
      • 3.1. 配置熔断器
      • 3.2. 查看Hystrix Dashboard

1、简介

微服务架构中,服务降级与熔断机制是保证系统稳定性和可靠性的关键技术。当系统中的某个服务发生故障或响应变慢时,服务降级和熔断机制可以帮助系统避免级联失败,保持整体系统的可用性。本文将介绍如何在Java中实现服务降级与熔断机制,主要使用Spring Cloud中的Hystrix作为示例工具。

2、服务降级

服务降级是指在系统的某个服务发生故障或超时的情况下,提供一个备选的处理逻辑,以保证系统的稳定性和用户体验。Spring Cloud提供了Hystrix来实现服务降级功能。

2.1. Hystrix基础配置

首先,我们需要在项目中引入Hystrix依赖:

  • 在pom.xml中添加依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.2. 启用Hystrix

在Spring Boot应用的主类上添加@EnableHystrix注解,以启用Hystrix支持:

java">package cn.juwatech.hystrixdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;@SpringBootApplication
@EnableHystrix
public class HystrixDemoApplication {public static void main(String[] args) {SpringApplication.run(HystrixDemoApplication.class, args);}
}

2.3. 实现服务降级

使用Hystrix的@HystrixCommand注解来定义服务降级逻辑。以下是一个示例,演示了如何在服务调用超时或失败时提供一个默认的降级响应:

java">package cn.juwatech.hystrixdemo.service;import org.springframework.stereotype.Service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;@Service
public class ExampleService {@HystrixCommand(fallbackMethod = "fallbackMethod")public String performOperation() {// Simulate a long-running operationtry {Thread.sleep(5000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}return "Operation completed";}public String fallbackMethod() {return "Service is currently unavailable, please try again later";}
}

2.4. 配置Hystrix

配置Hystrix以调整其行为,可以在application.yml中添加如下配置:

hystrix:command:default:execution:timeout:enabled: truetimeoutInMilliseconds: 3000

3、熔断机制

熔断机制是防止服务调用出现失败的一个重要手段。当系统检测到服务调用失败率超过一定阈值时,熔断器会将服务的状态切换为“断路器打开”,从而防止进一步的请求到达该服务。Hystrix提供了熔断机制的支持。

3.1. 配置熔断器

使用@HystrixCommand注解中的circuitBreaker属性来配置熔断器。例如,配置熔断器的请求失败阈值和请求超时:

java">package cn.juwatech.hystrixdemo.service;import org.springframework.stereotype.Service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;@Service
public class ExampleService {@HystrixCommand(fallbackMethod = "fallbackMethod", commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000"),@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000"),@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50")})public String performOperation() {// Simulate a long-running operationtry {Thread.sleep(5000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}return "Operation completed";}public String fallbackMethod() {return "Service is currently unavailable, please try again later";}
}

在上面的配置中:

  • execution.isolation.thread.timeoutInMilliseconds:设置请求超时时间。
  • circuitBreaker.requestVolumeThreshold:设置熔断器打开前的请求数量阈值。
  • circuitBreaker.sleepWindowInMilliseconds:设置熔断器关闭后的休眠时间。
  • circuitBreaker.errorThresholdPercentage:设置熔断器打开的错误百分比阈值。

3.2. 查看Hystrix Dashboard

Hystrix Dashboard可以实时监控Hystrix的状态和性能。要启用Hystrix Dashboard,需要在项目中添加依赖:

  • 在pom.xml中添加依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
  • 配置监控页面:
java">package cn.juwatech.hystrixdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {public static void main(String[] args) {SpringApplication.run(HystrixDashboardApplication.class, args);}
}
  • 访问http://localhost:8080/hystrix,输入http://localhost:8080/actuator/hystrix.stream以查看监控数据。

http://www.ppmy.cn/news/1521003.html

相关文章

flowable 国产数据库并发性能优化

最近在生产环境有用户反馈系统流转速度较慢&#xff0c;这边用的是金仓数据库&#xff0c;这边查了数据库的慢sql日志&#xff0c;最后发现问题&#xff0c;以下是部分慢sql的执行时间截图 主要都是流转过程中更新执行表和历史变量表执行时间较长&#xff0c;于是查了表的默认索…

2024年全国铁路(铁路、高铁、地铁)矢量数据集

数据更新时间​&#xff1a;2024年6月​&#xff1b; ​数据范围&#xff1a;全国各省&#xff08;不包含台湾&#xff09;; 数据格式​&#xff1a;shp; ​数据包含类型&#xff1a;铁路、高铁、地铁 数据​坐标信息&#xff1a; EPSG Code 4326 大地基准面 D_WGS_1…

【OpenGL】 理解makeCurrent函数

背景 用QT学校OpenGL绝对可以事半功倍&#xff0c;QT提供了一系列对OpenGL的支持&#xff0c;包括OPenGL窗口类&#xff0c;对OpenGL函数的面向对象的封装等。 总体说明 在Qt框架中&#xff0c;makeCurrent 是QOpenGLContext类的一个方法&#xff0c;它封装了这些平台特定的…

CSS解析:盒模型

在网页上实现元素布局涉及很多技术。在复杂网站上&#xff0c;可能会用到浮动元素、绝对定位元素以及其他各种大小的元素&#xff0c;甚至也会使用较新的CSS特性&#xff0c;比如Flexbox或者网格布局。 在此之前我们要打好基础&#xff0c;深刻理解浏览器是如何设置元素的大小…

Update Azure OpenAI npm Package to 2023-12-01-preview Version

题意&#xff1a;将 Azure OpenAI npm 包更新到 2023-12-01-preview 版本 问题背景&#xff1a; I am currently using the azure-openai npm package in my project with version 2023-03-15-preview. As per the latest updates, version 2023-12-01-preview is available a…

使用 SCSS 或 LESS 相比于纯 CSS 的好处

使用 SCSS 或 LESS 相比于纯 CSS 有以下几个好处&#xff1a; 变量支持&#xff1a; SCSS/LESS&#xff1a;可以定义变量用于存储颜色、字体大小、间距等值&#xff0c;便于在整个样式文件中复用。例如&#xff0c;可以定义一个颜色变量 $primary-color: #3498db;&#xff0c;然…

网站维护更新简易单页404页html代码

源码介绍 一个简约风格的单页html页面&#xff0c;可用于网站维护中或更新网站时挂个首页使用&#xff0c;如果不喜欢现在的颜色请F12修改设置既可。 效果预览 源码获取 网站维护更新简易单页404页html代码

数据分析利器:Java与MySQL构建强大的数据挖掘系统

数据分析在当今信息时代具有重要的作用&#xff0c;它可以帮助企业和组织深入理解数据&#xff0c;发现隐藏在数据中的模式和规律&#xff0c;并基于这些洞察进行决策和优化。Java与MySQL作为两个强大的工具&#xff0c;结合起来可以构建出一个高效、可靠且功能丰富的数据挖掘系…