Sentinel使用实例

这篇具有很好参考价值的文章主要介绍了Sentinel使用实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不说了,直接上官方文档

https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md

Sentinel Example

项目说明

本项目演示如何使用 Sentinel starter 完成 Spring Cloud 应用的限流管理。

Sentinel 是阿里巴巴开源的分布式系统的流量防卫组件,Sentinel 把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。

示例

如何接入

在启动示例进行演示之前,我们先了解一下如何接入 Sentinel。

注意:本章节只是为了便于您理解接入方式,本示例代码中已经完成接入工作,您无需再进行修改。

  1. 首先,修改 pom.xml 文件,引入 Sentinel starter。
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  1. 接入限流埋点

    • HTTP 埋点

      Sentinel starter 默认为所有的 HTTP 服务提供了限流埋点,如果只想对 HTTP 服务进行限流,那么只需要引入依赖,无需修改代码。

    • 自定义埋点

      如果需要对某个特定的方法进行限流或降级,可以通过 @SentinelResource 注解来完成限流的埋点,示例代码如下:

      @SentinelResource("resource")
      public String hello() {
          return "Hello";
      }
      

      当然也可以通过原始的 SphU.entry(xxx) 方法进行埋点,可以参见 Sentinel 文档。

  2. 配置限流规则

    Sentinel 提供了两种配置限流规则的方式:代码配置 和 控制台配置。本示例使用的方式为通过控制台配置。

    1. 通过代码来实现限流规则的配置。一个简单的限流规则配置示例代码如下,更多限流规则配置详情请参考 Sentinel 文档。
    List<FlowRule> rules = new ArrayList<FlowRule>();
    FlowRule rule = new FlowRule();
    rule.setResource(str);
    // set limit qps to 10
    rule.setCount(10);
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setLimitApp("default");
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
    
    1. 通过控制台进行限流规则配置请参考文章后面的图文说明。

启动 Sentinel 控制台

  1. 首先需要获取 Sentinel 控制台,支持直接下载和源码构建两种方式。

    1. 直接下载:下载 Sentinel 控制台
    2. 源码构建:进入 Sentinel Github 项目页面,将代码 git clone 到本地自行编译打包,参考此文档。
  2. 启动控制台,执行 Java 命令 java -jar sentinel-dashboard.jar完成 Sentinel 控制台的启动。
    控制台默认的监听端口为 8080。Sentinel 控制台使用 Spring Boot 编程模型开发,如果需要指定其他端口,请使用 Spring Boot 容器配置的标准方式,详情请参考 Spring Boot 文档。

应用启动

  1. 增加配置,在应用的 /src/main/resources/application.properties 中添加基本配置信息

    spring.application.name=sentinel-example
    server.port=18083
    spring.cloud.sentinel.transport.dashboard=localhost:8080
    
  2. 启动应用,支持 IDE 直接启动和编译打包后启动。

    1. IDE直接启动:找到主类 ServiceApplication,执行 main 方法启动应用。
    2. 打包编译后启动:首先执行 mvn clean package 将工程编译打包,然后执行 java -jar sentinel-core-example.jar启动应用。

调用服务

使用 curl 分别调用两个 URL,可以看到访问成功。

配置限流规则并验证

  1. 访问 http://localhost:8080 页面,可以在左侧看到 Sentinel-Example 应用已经注册到了控制台,单击 流控规则 ,可以看到目前的流控规则为空。

注意:如果您在控制台没有找到应用,请调用一下进行了 Sentinel 埋点的 URL 或方法,因为 Sentinel 使用了 lazy load 策略。详细的排查过程请参见 Sentinel FAQ。

  1. 配置 URL 限流规则:点击新增流控规则,资源名填写需要限流的 URL 相对路径,单机阈值选择需要限流的阈值,点击新增进行确认。(为了便于演示效果,这里将值设置成了 1)。

  2. 配置自定义限流规则:点击新增流控规则,资源名填写 @SentinelResource 注解 value 字段的值,单机阈值选择需要限流的阈值,点击新增进行确认。(为了便于演示效果,这里将值设置成了 1)。

  3. 访问 URL,当 QPS 超过 1 时,可以看到限流效果如下。

自定义限流处理逻辑

  • 默认限流异常处理

URL 限流触发后默认处理逻辑是,直接返回 “Blocked by Sentinel (flow limiting)”。
如果需要自定义处理逻辑,实现的方式如下:

public class CustomUrlBlockHandler implements UrlBlockHandler {
    @Override
    public void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
        // todo add your logic
    }
}

WebCallbackManager.setUrlBlockHandler(new CustomUrlBlockHandler());
  • 使用 @SentinelResource 注解下的限流异常处理

如果需要自定义处理逻辑,填写 @SentinelResource 注解的 blockHandler 属性(针对所有类型的 BlockException,需自行判断)或 fallback 属性(针对熔断降级异常),注意对应方法的签名和位置有限制,详情见 Sentinel 注解支持文档。示例实现如下:

public class TestService {

    // blockHandler 是位于 ExceptionUtil 类下的 handleException 静态方法,需符合对应的类型限制.
    @SentinelResource(value = "test", blockHandler = "handleException", blockHandlerClass = {ExceptionUtil.class})
    public void test() {
        System.out.println("Test");
    }

    // blockHandler 是位于当前类下的 exceptionHandler 方法,需符合对应的类型限制.
    @SentinelResource(value = "hello", blockHandler = "exceptionHandler")
    public String hello(long s) {
        return String.format("Hello at %d", s);
    }

    public String exceptionHandler(long s, BlockException ex) {
        // Do some log here.
        ex.printStackTrace();
        return "Oops, error occurred at " + s;
    }
}
public final class ExceptionUtil {

    public static void handleException(BlockException ex) {
        System.out.println("Oops: " + ex.getClass().getCanonicalName());
    }
}

一个简单的 @SentinelResource 示例可以见 sentinel-demo-annotation-spring-aop。

Endpoint 信息查看

Spring Boot 应用支持通过 Endpoint 来暴露相关信息,Sentinel Starter 也支持这一点。

在使用之前需要在 Maven 中添加 spring-boot-starter-actuator依赖,并在配置中允许 Endpoints 的访问。

  • Spring Boot 1.x 中添加配置 management.security.enabled=false
  • Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*

Spring Boot 1.x 可以通过访问 http://127.0.0.1:18083/sentinel 来查看 Sentinel Endpoint 的信息。Spring Boot 2.x 可以通过访问 http://127.0.0.1:18083/actuator/sentinel 来访问。

查看实时监控

Sentinel 控制台支持实时监控查看,您可以通过 Sentinel 控制台查看各链路的请求的通过数和被限流数等信息。
其中 p_qps 为通过(pass) 流控的 QPS,b_qps 为被限流 (block) 的 QPS。

ReadableDataSource 支持

Sentinel 内部提供了动态规则的扩展实现 ReadableDataSource。

Sentinel starter 整合了目前存在的几类 ReadableDataSource。只需要在配置文件中进行相关配置,即可在 Spring 容器中自动注册 DataSource。

比如要定义两个ReadableDataSource,分别是 FileRefreshableDataSourceNacosDataSource,配置如下:

spring.cloud.sentinel.datasource.ds1.file.file=classpath: degraderule.json
spring.cloud.sentinel.datasource.ds1.file.data-type=json

spring.cloud.sentinel.datasource.ds2.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds2.nacos.dataId=sentinel
spring.cloud.sentinel.datasource.ds2.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds2.nacos.data-type=json

ds1ds2 表示ReadableDataSource的名称,可随意编写。ds1ds2 后面的 filenacos 表示ReadableDataSource的类型。

目前支持file, nacos, zk, apolloredis 这5种类型。

其中nacoszkapolloredis 这4种类型的使用需要加上对应的依赖sentinel-datasource-nacos, sentinel-datasource-zookeeper, sentinel-datasource-apollo, sentinel-datasource-redis

当ReadableDataSource加载规则数据成功的时候,控制台会打印出相应的日志信息:

[Sentinel Starter] DataSource ds1-sentinel-file-datasource load 3 DegradeRule
[Sentinel Starter] DataSource ds2-sentinel-nacos-datasource load 2 FlowRule

More

Sentinel 是一款功能强大的中间件,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。此 Demo 仅演示了 使用 Sentinel 作为限流工具的使用,更多 Sentinel 相关的信息,请参考 Sentinel 项目。

如果您对 spring cloud sentinel starter 有任何建议或想法,欢迎在 issue 中或者通过其他社区渠道向我们提出。文章来源地址https://www.toymoban.com/news/detail-648619.html

到了这里,关于Sentinel使用实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sentinel简单使用

    核心demo: 1 引入依赖:   3 限流保护代码: 以上就是sentinel最核心的代码使用逻辑。可以在代码中硬编码需要保护的资源,然后在调用资源之前使用Api做限流保护。 在实际使用过程中,几乎不会使用如上方式做资源保护:代码侵入性强,不能动态扩展需要保护的资源 使用注

    2024年02月14日
    浏览(17)
  • sentinel的基本使用

    在一些互联网项目中高并发的场景很多,瞬间流量很大,会导致我们服务不可用。 sentinel则可以保证我们服务的正常运行,提供限流、熔断、降级等方法来实现   一.限流:         1.导入坐标          2.配置         3.下在sentinel对应的版本服务并启动         4.按照界

    2024年02月11日
    浏览(27)
  • 如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的两种限流模式,由于篇幅原因,后续文章将详细介绍Sentinel的其他三种。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页

    2024年02月05日
    浏览(36)
  • 7、sentinel使用和源码分析

    在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况,此时若有大量的请求涌入,就会出现多条线程阻塞等待,进而导致服务瘫痪。 由于服务与服务之间的依赖性,故障会传播,会对整个

    2024年02月16日
    浏览(31)
  • Sentinel基本使用与源码分析

    系列文章目录和关于我 Sentinel官网 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要 以流量为切入点 ,从 流量路由 、 流量控制 、 流量整形 、 熔断降级 、 系统自适应过载保护 、 热点流量防护 等多个维度来帮助开发者保障微服务的稳定性。 任意时间到

    2024年02月05日
    浏览(31)
  • Sentinel 容灾中心的使用

    Nacos环境搭建 Nacos注册中心的使用 Nacos配置中心的使用 生产者 spring-cloud-alibaba:2021.0.4.0 spring-boot:2.6.8 spring-cloud-loadbalancer:3.1.3 sentinel:2021.0.4.0 消费者 生产者 消费者 【资源】是sentinel限流、熔断的基本单位,可以设置每个资源的阈值。 控制层 其中echo方法使用注解形式定

    2024年02月15日
    浏览(26)
  • sentinel + nacos 超详细使用步骤

    首先在sentinel-dashboard这个连接中下载对应的jar包。 下载完成后, 使用下面命令进行启动 看到一下日志表示启动成功(这里暂时没有遇到过启动失败的情况,又遇到失败的朋友可以评论沟通一下) 登录页面 sentinel首页,这里因为还没有在sentinel-dashboard接入,所以还看不到我们

    2023年04月08日
    浏览(37)
  • sentinel加密狗使用及规则配置

    Sentinel加密狗是一种硬件加密设备,用于保护软件应用程序免受未经授权的访问和复制。它可以提供软件许可管理、访问控制和数据保护等功能。下面是Sentinel加密狗的使用及规则配置的相关介绍。 Sentinel加密狗的使用 插入加密狗:将Sentinel加密狗插入计算机的USB接口。 安装

    2024年02月09日
    浏览(40)
  • SpringCloud中 Sentinel 限流的使用

    引入依赖 手动编写限流规则,缺点是不够灵活,如果需要改变限流规则需要修改源码 利用控制台编写限流规则,控制台是额外的Java项目,需要运行起来,优点是不需要修改源码,可以运行时修改限流规则,启动后访问 localhost:18080即可,需要注意的时,控制台一开始并不会显

    2024年02月13日
    浏览(39)
  • 微服务下使用sentinel进行服务熔断

    首先引入sentinel对应依赖 下面是示例service代码,通过openFeign完成服务调用 首先需要配置openFeign的服务调用失败的策略,需要对对应的feign接口实现策略失败类 然后在feign的调用接口处,执行熔断策略实现类(fallback) 然后需要下载阿里的sentinel-dashboard,启动控制台,并在该服务的配置

    2024年04月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包