当前位置:   article > 正文

sentinel学习小结_sentinel eager

sentinel eager

1、安装sentinel客户端

下载链接:Release v1.7.0 · alibaba/Sentinel · GitHub 选择sentinel-dashboard-1.7.0.jar下载

进去jar包目录启动:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.0.jar

其中 -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080

注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。

增加下面的参数来进行配置:

-Dsentinel.dashboard.auth.username=sentinel: 用于指定控制台的登录用户名为 sentinel; -Dsentinel.dashboard.auth.password=123456: 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel -Dserver.servlet.session.timeout=7200: 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

本地启动,访问:localhost:8080,输入账户密码登录后,可以看到如下页面:

img

登录成功后

2、SpringCloud应用整合Sentinel

在pom.xml中引入依赖

  1. <!--sentinel限流熔断 -->
  2. <dependency>
  3.    <groupId>com.alibaba.cloud</groupId>
  4.    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5.    <version>1.5.1.RELEASE</version>
  6. </dependency>

修改yaml文件,开启sentinel支持

  1. spring:
  2. cloud:
  3.   sentinel:
  4.     eager: true #服务启动直接建立心跳连接
  5.     transport:
  6.       port: 8719
  7.       dashboard: 127.0.0.1:8081 #sentinel控制台地址

其中,spring.cloud.sentinel.eager=true 可使 你的SpringCloud应用启动时,直接与Sentinel建立心跳连接,访问sentinel 控制台就可以看到服务连接情况,不需要第一次访问应用的某个接口,才连接sentinel。

这里的 spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

Feign的支持

Sentinel 适配了 Feign 组件。如果想使用,除了引入 spring-cloud-starter-alibaba-sentinel 的依赖外还需要 2 个步骤:

  • 配置文件打开 Sentinel 对 Feign 的支持,增加如下配置:

    1. feign:
    2. sentinel:
    3.   enabled: true #开启sentinel支持

  • 加入 spring-cloud-starter-openfeign 依赖使 Sentinel starter 中的自动化配置类生效:

    1. <dependency>
    2.    <groupId>org.springframework.cloud</groupId>
    3.    <artifactId>spring-cloud-starter-openfeign</artifactId>
    4. </dependency>

增加测试类和兜底类

在工程中新建一个controller在其中定义方法,并采用 @SentinelResource 注解定义资源,其中value值是资源名,blockHandlerClass 和 blockHandler分别是兜底类和兜底方法,采用兜底类较在业务类中为每个方法单独写兜底方法优点在于避免代码的侵入和膨胀。

测试类:

  1. package com.rayoo.erayoo.gateway.controller;
  2. import com.alibaba.csp.sentinel.annotation.SentinelResource;
  3. import com.rayoo.erayoo.gateway.handler.CustomerBlockHandler;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import javax.servlet.http.HttpServletRequest;
  9. @RestController
  10. @RequestMapping("/test")
  11. @Slf4j
  12. public class SentinelController {
  13.    @GetMapping("/add")
  14.    @SentinelResource(value = "add",blockHandlerClass = CustomerBlockHandler.class,blockHandler = "handlerException")
  15.    public String testAdd(HttpServletRequest request){
  16.        return "sentinel add";
  17.   }
  18. }

兜底类

  1. package com.rayoo.erayoo.gateway.handler;
  2. import com.alibaba.csp.sentinel.slots.block.BlockException;
  3. import javax.servlet.http.HttpServletRequest;
  4. public class CustomerBlockHandler {
  5.    public static String handlerException(HttpServletRequest request,
  6.                                          BlockException blockException){
  7.        return "sentinel error";
  8.   }
  9. }

访问该接口:http://127.0.0.1:7777/test/add,然后刷新sentinel控制台:http://localhost:8081/

注:访问端口是7777是本工程在配置中心配置的访问端口是7777

配置限流规则

在完成了上面后,我们在erayoo-gateway服务下,点击簇点链路菜单,可以看到如下界面:

 

其中/add接口,就是我们上一节中实现并调用过的接口。通过点击流控按钮,来为该接口设置限流规则,比如:

这里做一个最简单的配置:

  • 阈值类型选择:QPS

  • 单机阈值:1

综合起来的配置效果就是,该接口的限流策略是每秒最多允许1个请求进入。

点击新增按钮之后,可以看到如下界面:

 其实就是左侧菜单中流控规则的界面,这里可以看到当前设置的所有限流策略。

验证限流规则

多次快速访问,就会出现被限流情况(1秒钟内访问超过1次)

3、网关流控

Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。

Spring Cloud Gateway网关整合Sentinel

从 1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流:

route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组

基于SpringBoot再构建一个service-gateway网关模块,使用时需引入以下模块(以 Maven 为例):

  1. <dependency>
  2.        <groupId>com.alibaba.cloud</groupId>
  3.        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  4.    </dependency>
  5.    <dependency>
  6.        <groupId>com.alibaba.cloud</groupId>
  7.        <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
  8.    </dependency>
  9.    <dependency>
  10.        <groupId>org.springframework.cloud</groupId>
  11.        <artifactId>spring-cloud-starter-gateway</artifactId>
  12.    </dependency>

增加配置:

  1. spring.cloud.sentinel.transport.port=8719
  2. # sentinel 控制台 sentinel/sentinel
  3. spring.cloud.sentinel.transport.dashboard=localhost:8080

将上面的service-order模块配置到service-gateway网关模块统一入口,配置路由规则:

  1. spring.cloud.gateway.routes[0].id=order
  2. spring.cloud.gateway.routes[0].uri=lb://service-order
  3. spring.cloud.gateway.routes[0].predicates[0]=Path=/serviceOrder/**
  4. spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1

启动网关应用,通过网关访问刚才那个测试接口:localhost:1234/serviceOrder/test

刷新sentinel控制台,如下:

img

gateway应用还可以自定义API分组管理

img

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/739435
推荐阅读
相关标签
  

闽ICP备14008679号