sentinel接入记录

news/2024/10/11 10:25:29

      1.引入pom依赖

     

<!-- SpringCloud ailibaba sentinel-datasource-nacos 持久化需要用到--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!-- SpringCloud ailibaba sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId></dependency><!-- SpringCloud ailibaba sentinel-datasource-nacos 持久化需要用到--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!-- 引入 Sentinel 数据源 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId></dependency>
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId></dependency>

 版本好统一按照

<version>1.8.3</version> 
为例。

2.本机启动
首先需要再idea的启动脚本添加命令
-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8081 -Dproject.name=项目别名

 其中,-Dserver.port是自己的项目名称,-Dcsp.sentinel.dashboard.server  是sentinel开启控制台的端口号,-Dproject是自己的项目名称

3.再项目里面使用sentinel做限流

    sentinel 有两种方式都可以做限流和降级,一种方式是直接再spring bean里面使用fallback以及blockHandler注解,另外一种方式则是和openFeign整合。目前项目里面使用的是第一种方式。

     注意一点,使用sentinel需要相应的bean被spring容器加载进去。

   

@Service
public class QueryRecommentServiceImpl{@SentinelResource(value = "queryRecommend", fallback = "getStaticData",blockHandler = "blockExceptionHandler")public List<String> queryRecommend(HomeRecommendStreamQuery query, HomeRecommendStreamDto streamDto, String sourceApp) {return null;
}public List<String> getStaticData(HomeRecommendStreamQuery query, HomeRecommendStreamDto streamDto, String sourceApp) {logger.info("==========start sentinel 降级策略==========");try {Random random = new Random();int r = random.nextInt(100) + 1;logger.debug("========随机从缓存获取一组帖子id:" + r);Set<String> stringSet = gwmRedisTemplate.opsForValue().get(RedisConstants.THREAD_HOT_SCORE_KEY + r);logger.debug("=========随机从缓存获取帖子result=======" + JSONObject.toJSON(stringSet));if (CollectionUtils.isNotEmpty(stringSet)) {List<String> stringList = new ArrayList<>(stringSet);return stringList;} else {logger.debug("============读取默认配置数据========" + config.getPostIds());return Optional.ofNullable(config.getPostIds()).orElse(Collections.emptyList());}} catch (Exception e) {throw new RuntimeException(e);}}/*** blockHandler需要设置为static** @param ex* @return*/public  List<String> blockExceptionHandler(HomeRecommendStreamQuery query, HomeRecommendStreamDto streamDto, String sourceApp,BlockException ex) {try {Random random = new Random();int r = random.nextInt(100) + 1;logger.debug("========随机从缓存获取一组帖子id:" + r);Set<String> stringSet = gwmRedisTemplate.opsForValue().get(RedisConstants.THREAD_HOT_SCORE_KEY + r);logger.debug("=========随机从缓存获取帖子result=======" + JSONObject.toJSON(stringSet));if (CollectionUtils.isNotEmpty(stringSet)) {List<String> stringList = new ArrayList<>(stringSet);return stringList;} else {logger.debug("============读取默认配置数据========" + config.getPostIds());return Optional.ofNullable(config.getPostIds()).orElse(Collections.emptyList());}} catch (Exception e) {throw new RuntimeException(e);}}}

  

Sentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。使用 Sentinel Annotation AspectJ Extension 的时候需要引入以下依赖:

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>x.y.z</version>
</dependency>
 之后再控制台界面就可以进行设置了。
 另外就是如果想要每次启动让sentinel生效,需要再配置一个sentienl的yaml配置,每次项目启动可以自动生效,大概格式如下:
 
[{"resource":"queryRecommend","controlBehavior":0,"count":20,"grade":1,"limitApp":"default","strategy":0}
]

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

简便安装,零要求高度,一体化设计!SD202型拉线地表位移监测设备

简便安装,零要求高度,一体化设计!SD202型拉线地表位移监测设备SD202型拉线地表位移是一种具有一体化密封设计的监测设备。其外观线条流畅美观,安装简便,无需打开机壳,对安装高度没有任何要求。该设备具备无线收发能力,并内置电池和SIM卡,无需额外连接采发模块。因此,它…

Day4 备战CCF-CSP练习

201403-5题目描述 有若干个任务需要在一台机器上运行。 它们之间没有依赖关系,因此可以被按照任意顺序执行。 该机器有两个 CPU 和一个 GPU。 对于每个任务,你可以为它分配不同的硬件资源: 在单个 CPU 上运行。 在两个 CPU 上同时运行。 在单个 CPU 和 GPU 上同时运行。 在两…

Linux安装Jenkins指南

Linux安装Jenkins指南 Jenkins,作为一款开源的自动化服务器,广泛用于持续集成和持续部署(CI/CD)流程中。它提供了强大的插件生态系统,使得集成各种开发工具、版本控制系统和构建工具变得简单高效。本文将详细介绍如何在Linux系统上安装和配置Jenkins。 一、准备工作机器要…

设计方案:FMC303-两路5.6Gsps 14bit DA FMC子卡

一、板卡概述FMC303可实现宽波段、双通道、14位、5.6GSPS(2.8gsps直接射频综合)DAC功能,时钟可采用内部时钟源(可选择锁定到外部参考),或外部提供的采样时钟。此外还为用户提供定制采样控制的触发器输入。FMC303在机械上和电气上符合FMC标准(ANSI/VITA 57.1)。该卡具有多…

kafka基础学习

Kafka 系列的阶段性总结(万字长文,做好准备)这是 Java 极客技术的第 265 篇原创文章 初识 Kafka 什么是 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎…

降低数据平台成本 ,Apache Airflow迁移上云案例分享

本文介绍了X集团将开源工作流平台Airflow迁移上华为云的案例,重点展示了开源专业服务中的云服务集成适配服务以及能力定制化服务,为此类型企业提供了一个可参考的范例。本文分享自华为云社区《华为云DTSE团队通过开源专业服务,助力马来西亚X集团平滑迁移上云》,作者:华为云…

maven-jar包管理

覆盖更新导致的问题 背景 快速接入sentinel-starter的包。团队80多个服务已经接入<dependency><artifactId>yxt-sentinel-spring-boot-starter</artifactId><groupId>com.yxt</groupId><version>1.0.0</version></dependency>…

[编程笔记] 未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序

未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序使用IIS部署站点,指向代码根目录,启动时报“未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序。”     直接启动项目是可以的,解决上述错误很简单,看下项目属性:  …