Sentinel入门

embedded/2025/3/3 17:34:37/

1.侵入式的方式

侵入式的代码如下,用SphU.entry定义要限制的业务逻辑

package com.hamster.sentineldemo;import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;import java.util.ArrayList;
import java.util.List;//测试侵入式代码的方式
public class Test {public static void main(String[] args) throws Exception {initFlowRules();while (true) {Entry entry = null;try {entry = SphU.entry("HelloWorld");/*您的业务逻辑 - 开始*/System.out.println("hello world");/*您的业务逻辑 - 结束*/} catch (BlockException e1) {/*流控逻辑处理 - 开始*/System.out.println("block!");/*流控逻辑处理 - 结束*/break;} finally {if (entry != null) {entry.exit();}}}}private static void initFlowRules(){List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource("HelloWorld");rule.setGrade(RuleConstant.FLOW_GRADE_QPS);// Set limit QPS to 20.rule.setCount(20);rules.add(rule);FlowRuleManager.loadRules(rules);}
}

2.注解方式

首先用@SentinelResource定义要限流的方法:

package com.hamster.sentineldemo;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@GetMapping("/test")@SentinelResource(value = "test",blockHandler = "testBlockHandler",fallback = "testFallback")public String test(){return "test";}public String testBlockHandler(BlockException ex){return "testBlockHandler";}
}

blockHandler 是被限流后的操作
fallback 是出错误时的操作,即熔断

然后定义规则:

package com.hamster.sentineldemo;import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import jakarta.annotation.PostConstruct;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Collections;@Configuration
public class SentinelConfig {@PostConstructpublic void initRules(){FlowRule rule = new FlowRule("test").setCount(1).setGrade(RuleConstant.FLOW_GRADE_QPS).setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);FlowRuleManager.loadRules(Collections.singletonList(rule));System.out.println("Rules loaded successfully.");}@Beanpublic SentinelResourceAspect sentinelResourceAspect() {return new SentinelResourceAspect();}
}

注解不生效的可能情况:
1.两个方法都要用public不要用private,第一个方法不加会导致sentinel找不到getResult这个资源名,同样的第二个不加会导致sentinel找不到这个方法然后报错。

2.两个方法返回类型必须一样。

3.两个方法的参数类型必须一样,数量和参数类型要保持一致,注意第一个方法加了@PathVariable这个注解,这个只是url传参用的不需要加。

4.blockHandler的值必须与你的兜底方法,也就是第二个方法保持一致。

5.blockHandler对应方法必须要加BlockException这个异常类参数。
在这里插入图片描述

参考:
入门教程 https://developer.aliyun.com/article/783342
不生效情况 https://www.cnblogs.com/ningyyrx/p/16018484.html


http://www.ppmy.cn/embedded/169670.html

相关文章

每天一个Flutter开发小项目 (9) : Flutter状态管理进阶 - Provider构建你的简易购物车应用

引言 欢迎再次回到 每天一个Flutter开发小项目 系列博客! 在前八篇博客中,我们已经系统学习了 Flutter UI 构建、用户交互、路由导航、数据持久化,以及网络请求等一系列关键技能。 您已经具备了构建功能较为全面的 Flutter 应用的能力。 随着应用功能的日益复杂,页面和组…

EasyRTC嵌入式WebRTC技术与AI大模型结合:从ICE框架优化到AI推理

实时通信技术在现代社会中扮演着越来越重要的角色&#xff0c;从视频会议到在线教育&#xff0c;再到远程医疗&#xff0c;其应用场景不断拓展。WebRTC作为一项开源项目&#xff0c;为浏览器和移动应用提供了便捷的实时通信能力。而EasyRTC作为基于WebRTC的嵌入式解决方案&…

阿里云AccessKey泄露以及nacos1.4.2漏洞修复

起因&#xff1a;每隔一段时间阿里云就会报AccessKey泄露了&#xff0c;但是并没有在代码中写AccessKey&#xff0c;后来发现在nacos中多了个新用户&#xff0c;是之前没有添加过的 排查&#xff1a; 1.检查是否开启了鉴权 查看配置文件application.properties # 是否开启授…

分布式事物在RocketMQ中的应用

RocketMQ 4.3 版本之后提供了对分布式事务消息的支持&#xff0c;它采用了一种类似于两阶段提交&#xff08;2PC&#xff09;的机制&#xff0c;但又有所不同&#xff0c;可以实现最终一致性的分布式事务。RocketMQ 的事务消息主要用于解决生产者发送消息和本地事务的原子性问题…

2020年蓝桥杯Java B组第二场题目+部分个人解析

#A&#xff1a;门牌制作 624 解一&#xff1a; public static void main(String[] args) {int count0;for(int i1;i<2020;i) {int ni;while(n>0) {if(n%102) {count;}n/10;}}System.out.println(count);} 解二&#xff1a; public static void main(String[] args) {…

在nodejs中使用ElasticSearch(三)通过ES语义检索,实现RAG

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合了信息检索和生成模型的技术&#xff0c;旨在提高生成模型的知识获取和生成能力。它通过在生成的过程中引入外部知识库或文档&#xff08;如数据库、搜索引擎或文档存储&#xff09;&#xff0c;帮助生成更…

android智能指针android::sp使用介绍

android::sp 是 Android 中的智能指针&#xff08;Smart Pointer&#xff09;的实现&#xff0c;用于管理对象的生命周期&#xff0c;避免手动管理内存泄漏等问题。它是 Android libutils 库中重要的一部分&#xff0c;常用于管理继承自 android::RefBase 的对象。 与标准库中…

北京大学DeepSeek提示词工程与落地场景(PDF无套路免费下载)

近年来&#xff0c;大模型技术飞速发展&#xff0c;但许多用户发现&#xff1a;即使使用同一款 AI 工具&#xff0c;效果也可能天差地别——有人能用 AI 快速生成精准方案&#xff0c;有人却只能得到笼统回答。这背后的关键差异&#xff0c;在于提示词工程的应用能力。 北京大…