当前位置:首页 > 科技  > 软件

五小步快速集成使用sentinel限流

来源: 责编: 时间:2023-09-18 21:40:09 395观看
导读1、环境和资源准备sentinel支持许多流控方式,比如:单机限流、熔断降级、集群限流、系统保护规则、黑白名单授权等。本文介绍如何快速集成使用sentinel,文中以单机限流为例,使用代码而非控制台配置的方式限流。sentinel官

1、环境和资源准备

o5w28资讯网——每日最新资讯28at.com

3、项目集成sentinel

项目中集成sentinel分如下5步。o5w28资讯网——每日最新资讯28at.com

3.1、引入pom

<!-- 这是sentinel的核心依赖 --><dependency>  <groupId>com.alibaba.csp</groupId>  <artifactId>sentinel-core</artifactId>  <version>1.8.0</version></dependency><!-- 这是将自己项目和sentinel-dashboard打通的依赖 --><dependency>  <groupId>com.alibaba.csp</groupId>  <artifactId>sentinel-transport-simple-http</artifactId>  <version>1.8.0</version></dependency><!-- 这是使用sentinel对限流资源进行AOP --><dependency>  <groupId>com.alibaba.csp</groupId>  <artifactId>sentinel-annotation-aspectj</artifactId>  <version>1.8.0</version></dependency>

3.2、增加sentinel-aop

@Configurationpublic class AopConfiguration {    @Bean    public SentinelResourceAspect sentinelResourceAspect() {        return new SentinelResourceAspect();    }}

3.3、增加sentinel.properties配置

在application.properties同级目录下,增加sentinel.properties文件,配置内容如下:o5w28资讯网——每日最新资讯28at.com

# 集成到sentinel的项目名称project.name=spring-sentinel-demo# 对应的sentinel-dashboard地址csp.sentinel.dashboard.server=localhost:8080

o5w28资讯网——每日最新资讯28at.com

同时需要加载sentinel.properties配置,有两种加载方式,选择一种即可,如下:o5w28资讯网——每日最新资讯28at.com

o5w28资讯网——每日最新资讯28at.com

3.4、设置需要被限流的资源

给需要被限流的资源打上注解@SentinelResource,使用方式如下。o5w28资讯网——每日最新资讯28at.com

  • 默认情况下,超出配置的流控阈值后,直接抛出 FlowException(BlockException) 异常,可以使用blockHandler自定义。
  • fallback用于配置熔断降级的方法,当发生慢调用、异常数、异常比例数,会调用fallback方法。
  • 可以针对部分异常情况做忽略处理,不再触发熔断降级。
@Servicepublic class TestServiceImpl implements top.mangod.springsentineldemo.service.TestService {    @Override    @SentinelResource(value = "test", blockHandler = "handleException", blockHandlerClass = {top.mangod.springsentineldemo.service.ExceptionUtil.class})    public void test() {        System.out.println("Test");    }    @Override    @SentinelResource(value = "hello", fallback = "helloFallback")    public String hello(long s) {        if (s < 0) {            throw new IllegalArgumentException("invalid arg");        }        return String.format("Hello at %d", s);    }    @Override    @SentinelResource(value = "helloAnother", defaultFallback = "defaultFallback",        exceptionsToIgnore = {IllegalStateException.class})    public String helloAnother(String name) {        if (name == null || "bad".equals(name)) {            throw new IllegalArgumentException("oops");        }        if ("foo".equals(name)) {            throw new IllegalStateException("oops");        }        return "Hello, " + name;    }    public String helloFallback(long s, Throwable ex) {        // Do some log here.        ex.printStackTrace();        return "Oops, error occurred at " + s;    }    public String defaultFallback() {        System.out.println("Go to default fallback");        return "default_fallback";    }}

3.5、指定和加载流控规则

文中我使用代码方式制定流控规则,在控制台中也可以直接配置流控规则,为什么不使用控制台方式呢?o5w28资讯网——每日最新资讯28at.com

如果是类似云原生的部署环境,比如:将spring应用打成docker镜像,然后在部署到Kubernetes中,部署之后Pod地址是会变化。o5w28资讯网——每日最新资讯28at.com

只要应用的地址变化后,之前的配置就消失了。不可能每次地址变化后都到控制台去重新配置策略,所以需要选择代码方式制定规则。o5w28资讯网——每日最新资讯28at.com

流控规则一般会有如下几个:o5w28资讯网——每日最新资讯28at.com

  • 资源限流规则FlowRule
  • 异常熔断降级规则DegradeRule
  • 系统过载保护规则SystemRule
  • 访问黑白名单规则AuthorityRule

控制台设置流控规则,如下:o5w28资讯网——每日最新资讯28at.com

o5w28资讯网——每日最新资讯28at.com

代码制定和加载流控规则,如下:o5w28资讯网——每日最新资讯28at.com

public static void main(String[] args) {    // 加载限流规则    initSentinelRule();    SpringApplication.run(SpringSentinelDemoApplication.class, args);  }  private static void initSentinelRule() {    // 资源限流    FlowRule flowRule = new FlowRule("test")        .setCount(1)        .setGrade(RuleConstant.FLOW_GRADE_QPS);    List<FlowRule> list = new ArrayList<>();        /*if (method) {            FlowRule flowRule1 = new FlowRule("test:sayHello(java.lang.String)")                    .setCount(5)                    .setGrade(RuleConstant.FLOW_GRADE_QPS);            list.add(flowRule1);        }*/    list.add(flowRule);    FlowRuleManager.loadRules(list);    // 异常降级    /*List<DegradeRule> DegradeRules = new ArrayList<>();    DegradeRule degradeRule = new DegradeRule("");    degradeRule.setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType());    degradeRule.setCount(0.7); // Threshold is 70% error ratio    degradeRule.setMinRequestAmount(100)            .setStatIntervalMs(30000) // 30s            .setTimeWindow(10);    DegradeRules.add(degradeRule);    DegradeRuleManager.loadRules(DegradeRules);*/    // 系统负载保护    /*List<SystemRule> systemRules = new ArrayList<>();    SystemRule systemRule = new SystemRule();    systemRule.setHighestSystemLoad(10);    systemRules.add(systemRule);    SystemRuleManager.loadRules(systemRules);*/        // 黑白名单授权访问    /*AuthorityRule rule = new AuthorityRule();    rule.setResource("test");    rule.setStrategy(RuleConstant.AUTHORITY_WHITE);    rule.setLimitApp("appA,appB");    AuthorityRuleManager.loadRules(Collections.singletonList(rule));*/  }

4、启动测试

项目启动完毕后,访问链接http://localhost:9091/foo,就可以在控制台上看到被限流的资源o5w28资讯网——每日最新资讯28at.com

o5w28资讯网——每日最新资讯28at.com

在流控规则这里,可以看到上文中在代码里设置的规则:o5w28资讯网——每日最新资讯28at.com

o5w28资讯网——每日最新资讯28at.com

启动项目后,测试限流效果,如下:o5w28资讯网——每日最新资讯28at.com

  1. 1秒内多次访问http://localhost:9091/foo,可以看到触发了限流异常:

o5w28资讯网——每日最新资讯28at.com

  1. 输入http://localhost:9091/foo?t=-1会触发异常。fallback用于配置熔断降级的方法,当发生慢调用、异常数、异常比例数时,会调用fallback方法。图片
  2. 输入http://localhost:9091/baz/foo、http://localhost:9091/baz/bad,会分别触发异常和默认fallback。图片

5、总结

本文主要介绍spring项目如何快速集成sentinel实现系统限流。o5w28资讯网——每日最新资讯28at.com

首先启动sentinel-dashboard,然后使用5个简单步骤即可使用sentinel限流。o5w28资讯网——每日最新资讯28at.com

在应用server的IP地址频繁变动的场景下,建议使用代码方式限流。o5w28资讯网——每日最新资讯28at.com

流控的方式较多,你需要根据自身的业务需求做选择,我一般情况下选择单机流控和系统保护。o5w28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10408-0.html五小步快速集成使用sentinel限流

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 微服务是个坏主意吗?

下一篇: TCP与UDP协议:网络通信中的两大重要角色

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top