博客
关于我
@SentinelResource注解中blockHandler与fallback属性详解
阅读量:796 次
发布时间:2023-03-28

本文共 2435 字,大约阅读时间需要 8 分钟。

Sentinel管控台的限流降级与熔断降级配置指南

一、介绍

Sentinel管控台通过@SentinelResource注解实现服务限流和熔断降级功能。其核心组件包括blockHandler和fallback,分别负责限流降级和熔断降级。

  • blockHandler:用于配置限流降级的处理逻辑,通常用于防止过度频繁的请求。
  • fallback:用于配置熔断降级的处理逻辑,用于处理业务异常情况。

二、只配置blockHandler

1. 单个blockHandler限流降级处理方法配置

通过在控制器中自定义单个或多个限流降级处理方法,可以实现流量控制。以下是控制器示例代码:

@RestControllerpublic class MyController {    @SentinelResource(value = "/test")    public String test() {        return "正常调用";    }    @SentinelResource(value = "/test", blockHandler = "blockHandlerA")    public String testBlock() {        return "触发限流降级";    }}

sentinel配置流控规则如下:

sentinel:  resource:    "/test":      blockHandler: blockHandlerA

当一秒一次点击时,不会触发限流降级。当快速点击超过阈值时,会调用自定义限流降级方法。

2. blockHandlerClass限流降级处理类配置

为了提升代码可读性,可以将限流降级逻辑封装到独立类中。以下是示例代码:

package com.example.sentinel.blockHandlerClass;import com.alibaba.csp.sentinel.slots.block.BlockException;public class BlockHandler {    public static String blockHandlerA(BlockException exception) {        return "这是第一个限流降级方法";    }}

在控制器中使用类似方式调用:

@SentinelResource(value = "/test", blockHandler = "BlockHandler.blockHandlerA")public String testBlock() {    return "触发限流降级";}

三、只配置fallback

1. 单个fallback熔断降级处理方法配置

通过在控制器中自定义单个或多个熔断降级处理方法,可以实现服务熔断。以下是控制器示例代码:

@RestControllerpublic class MyController {    @SentinelResource(value = "/test", fallback = "fallbackA")    public String test() {        return "正常调用";    }    @SentinelResource(value = "/test", fallback = "fallbackB")    public String testFallback() {        return "触发熔断降级";    }}

sentinel配置流控规则如下:

sentinel:  resource:    "/test":      fallback: fallbackB

当调用接口后台异常时,会调用自定义熔断降级方法。

2. fallbackClass熔断降级处理类配置

同样可以将熔断降级逻辑封装到独立类中。以下是示例代码:

package com.example.sentinel.fallback;import com.alibaba.csp.sentinel.slots.block.BlockException;public class Fallback {    public static String fallbackA() {        return "这是第一个熔断降级方法";    }}

在控制器中使用类似方式调用:

@SentinelResource(value = "/test", fallback = "Fallback.fallbackB")public String testFallback() {    return "触发熔断降级";}

四、blockHandler和fallback都配置

1. 控制器代码示例

@RestControllerpublic class MyController {    @SentinelResource(value = "/test", blockHandler = "BlockHandler.blockHandlerA", fallback = "Fallback.fallbackB")    public String test() {        return "正常调用";    }}

2. sentinel配置流控规则

sentinel:  resource:    "/test":      blockHandler: BlockHandler.blockHandlerA      fallback: Fallback.fallbackB

3. 测试结果

  • 当一秒一次点击时,不会触发限流降级或熔断降级,始终调用正常逻辑。
  • 当快速点击超过阈值时,会优先触发限流降级。
  • 当服务异常时,会触发熔断降级。

转载地址:http://wbhfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现base85 编码算法(附完整源码)
查看>>
Objective-C实现basic graphs基本图算法(附完整源码)
查看>>
Objective-C实现BCC校验计算(附完整源码)
查看>>
Objective-C实现bead sort珠排序算法(附完整源码)
查看>>
Objective-C实现BeadSort珠排序算法(附完整源码)
查看>>
Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现BF算法 (附完整源码)
查看>>
Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
查看>>
Objective-C实现binomial coefficient二项式系数算法(附完整源码)
查看>>
Objective-C实现check strong password检查密码强度算法(附完整源码)
查看>>
Objective-C实现disjoint set不相交集算法(附完整源码)
查看>>
Objective-C实现DNF排序算法(附完整源码)
查看>>
Objective-C实现double factorial recursive双阶乘递归算法(附完整源码)
查看>>
Objective-C实现double hash双哈希算法(附完整源码)
查看>>
Objective-C实现double linear search recursion双线性搜索递归算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
查看>>
Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
查看>>
Objective-C实现Edmonds-Karp算法(附完整源码)
查看>>