点击下载教程项目代码: netflix_hystrix_demo.zip
netflix_hystrix_demo.zip
服务降级是指,当请求超时、资源不足、系统面临高并发、高负载等情况时,为了保障核心业务的正常运行和系统的稳定性,对一些非核心功能或服务进行限制、暂停或简化处理的一种技术手段。
服务降级将不会调用真实服务,而是使用快速失败(fallback)方式直接返回一个托底数据,保证服务链条的完整,避免服务雪崩。
确保核心业务的可用性和性能不受影响,优先满足核心业务的资源需求,使核心业务能够稳定运行,避免因系统过载而导致整个系统崩溃或核心业务无法正常提供服务。
通过降低非核心功能的负载,减少系统的资源消耗和压力,从而提高系统的整体稳定性和可靠性,降低系统出现故障的风险。
当系统出现部分故障或资源不足时,能够快速地对非关键服务进行降级处理,避免故障的扩散和影响范围的扩大,使系统能够在有限的资源下尽可能地保持正常运行状态,为故障修复争取时间。
第一步:使用 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 地址,输出如下图:

通过上图可知,成功触发了我们定义的 fallback 降级方法。
注意:
要触发降级,需要将目标 USER 服务停掉。
服务降级及当调用服务出现错误时,返回托底数据。
