SpringCloud系列(32)--使用Hystrix进行全局服务降级

前言:在上一节中我们使用Hystrix进行了服务降级,但是要在每个方法上面配置@HystrixCommand才能实现服务降级,如果需要进行服务降级的方法多了,@HystrixCommand也就得配置很多遍,所以本节内容则是使用Hystrix进行了全局服务降级处理。

1、修改cloud-consumer-feign-hystrix-order80子模块的OrderHystrixController类
java 复制代码
package com.ken.springcloud.controller;

import com.ken.springcloud.service.PaymentHystrixService;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@DefaultProperties(defaultFallback = "paymentGlobalFallBackMethod")
public class OrdertHystrixController {

    @Resource
    private PaymentHystrixService paymentHystrixService;

    @GetMapping("/consumer/payment/hystrix/ok/{id}")
    public String paymentInfoOK(@PathVariable("id") Integer id) {
        String result = paymentHystrixService.paymentInfoOK(id);
        return result;
    }

    @GetMapping("/consumer/payment/hystrix/timeout/{id}")
    //一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好的fallbackMethod调用类中的指定方法,这里设置服务降级的条件为连接超时超过3秒,即3秒内走paymentInfoTimeOut方法内的业务逻辑,超过3秒走paymentInfoTimeOutHandler方法
    //@HystrixCommand(fallbackMethod = "paymentInfoTimeOutHandler",commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")})
    //不指明fallbackMethod方法,其走的就是默认的全局方法defaultFallback,指定就走指定的fallbackMethod方法
    @HystrixCommand
    public String paymentInfoTimeOut(@PathVariable("id") Integer id) {
        //这里故意异常用于测试异常后是否会走服务降级的回退方法
        int i = 10/0;
        String result = paymentHystrixService.paymentInfoTimeOut(id);
        return result;
    }

    public String paymentInfoTimeOutHandler(Integer id) {
        return "服务提供者繁忙,请稍后再试";
    }

    //全局fallback方法,配置了@HystrixCommand但没有指明fallbackMethod方法的都走这个全局fallback方法
    public String paymentGlobalFallBackMethod() {
        return "Global异常处理";
    }
}
2、重启cloud-consumer-feign-hystrix-order80服务

效果图:

3、 在浏览器的地址栏里分别输入http://localhost:8080/consumer/payment/hystrix/timeout/1通过调用这个接口查看服务消费者的全局服务降级功能是否正常运行

由图可知服务消费者的全局服务降级成功,在服务异常后走了默认全局回退方法paymentGlobalFallBackMethod

相关推荐
鬼先生_sir14 小时前
SpringCloud-Sentinel(熔断降级 & 流量控制)
spring·spring cloud·sentinel
木子欢儿1 天前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y1 天前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
鬼先生_sir1 天前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
文慧的科技江湖1 天前
光储充协同的终极闭环:用SpringCloud微服务打造“发-储-充-用“智能能源网络 - 慧知开源充电桩管理平台
java·开发语言·spring cloud·微服务·能源·充电桩开源平台·慧知重卡开源充电桩平台
鬼先生_sir1 天前
SpringCloud-Stream + RocketMQ/Kafka
spring cloud·kafka·rocketmq·stream
小江的记录本3 天前
【JEECG Boot】 JEECG Boot——数据字典管理 系统性知识体系全解析
java·前端·spring boot·后端·spring·spring cloud·mybatis
杰克尼3 天前
springCloud(day10-面试篇)
redis·spring cloud·面试
鬼先生_sir3 天前
Spring Cloud LoadBalancer 详解:从原理到生产实战(2026最新版)
spring cloud·负载均衡·loadbalancer
QC·Rex3 天前
Spring Boot 3 微服务架构实战:从零构建企业级分布式系统
spring cloud·微服务架构·java 17·分布式系统·spring boot 3