Netflix Hystrix 服务降级

服务降级是指,当请求超时、资源不足、系统面临高并发、高负载等情况时,为了保障核心业务的正常运行和系统的稳定性,对一些非核心功能或服务进行限制、暂停或简化处理的一种技术手段。

服务降级将不会调用真实服务,而是使用快速失败(fallback)方式直接返回一个托底数据,保证服务链条的完整,避免服务雪崩。

服务降级目的

保障核心业务

确保核心业务的可用性和性能不受影响,优先满足核心业务的资源需求,使核心业务能够稳定运行,避免因系统过载而导致整个系统崩溃或核心业务无法正常提供服务。

提高系统稳定性

通过降低非核心功能的负载,减少系统的资源消耗和压力,从而提高系统的整体稳定性和可靠性,降低系统出现故障的风险。

快速响应故障

当系统出现部分故障或资源不足时,能够快速地对非关键服务进行降级处理,避免故障的扩散和影响范围的扩大,使系统能够在有限的资源下尽可能地保持正常运行状态,为故障修复争取时间。

Hystrix 实现降级

第一步:使用 Maven 引入 Hystrix 的依赖,请参考“Netflix Hystrix 入门实例

第二步:在 Spring Boot 项目的启动类上添加 @EnableCircuitBreaker 注解,开启 Hystrix 的断路器功能。

第三步:定义服务降级方法

创建一个类,在其中定义服务降级的方法。该方法的返回值类型和参数列表需要与被降级的服务方法一致。例如,假设我们有一个获取用户信息的服务方法,其定义如下:

package com.hxstrive.hystrix_demo.controller;

import com.hxstrive.hystrix_demo.dto.CommonReturn;
import com.hxstrive.hystrix_demo.entity.User;
import com.hxstrive.hystrix_demo.service.UserService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Hystrix 降级
 * @author hxstrive.com
 */
@RestController
@RequestMapping("/demo2")
public class Demo2Controller {

    @Autowired
    private UserService userService;

    @GetMapping("/getUserById")
    @HystrixCommand(fallbackMethod = "fallback")
    public CommonReturn<User> getUserById(@RequestParam Long id) {
        return userService.getUserById(id);
    }

    /**
     * 当服务调用失败时,调用此方法
     */
    private CommonReturn<User> fallback(Long id) {
        return CommonReturn.fail("网络出现问题,调用 fallback 方法,id=" + id);
    }

}

启动服务,使用浏览器访问 http://localhost:8080/demo2/getUserById?id=1 地址,输出如下图:

df80006f0fab9c1cf33702a5d9ff6968_1731759355291-7764bbcc-a65d-4b38-a1ad-2cf844dfb057.png

通过上图可知,成功触发了我们定义的 fallback 降级方法。

注意:

  • 要触发降级,需要将目标 USER 服务停掉。

  • 服务降级及当调用服务出现错误时,返回托底数据

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号