赞
踩
下载链接: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,
输入账户密码登录后,可以看到如下页面:
登录成功后
在pom.xml中引入依赖
- <!--sentinel限流熔断 -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
- <version>1.5.1.RELEASE</version>
- </dependency>
修改yaml文件,开启sentinel支持
- spring:
- cloud:
- sentinel:
- eager: true #服务启动直接建立心跳连接
- transport:
- port: 8719
- 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 的支持,增加如下配置:
- feign:
- sentinel:
- enabled: true #开启sentinel支持
加入 spring-cloud-starter-openfeign
依赖使 Sentinel starter 中的自动化配置类生效:
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-openfeign</artifactId>
- </dependency>
增加测试类和兜底类
在工程中新建一个controller在其中定义方法,并采用 @SentinelResource 注解定义资源,其中value值是资源名,blockHandlerClass 和 blockHandler分别是兜底类和兜底方法,采用兜底类较在业务类中为每个方法单独写兜底方法优点在于避免代码的侵入和膨胀。
测试类:
- package com.rayoo.erayoo.gateway.controller;
-
- import com.alibaba.csp.sentinel.annotation.SentinelResource;
- import com.rayoo.erayoo.gateway.handler.CustomerBlockHandler;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- import javax.servlet.http.HttpServletRequest;
-
- @RestController
- @RequestMapping("/test")
- @Slf4j
- public class SentinelController {
- @GetMapping("/add")
- @SentinelResource(value = "add",blockHandlerClass = CustomerBlockHandler.class,blockHandler = "handlerException")
-
- public String testAdd(HttpServletRequest request){
- return "sentinel add";
- }
- }
兜底类
- package com.rayoo.erayoo.gateway.handler;
-
- import com.alibaba.csp.sentinel.slots.block.BlockException;
-
- import javax.servlet.http.HttpServletRequest;
-
- public class CustomerBlockHandler {
- public static String handlerException(HttpServletRequest request,
- BlockException blockException){
- return "sentinel error";
- }
- }
访问该接口:http://127.0.0.1:7777/test/add,然后刷新sentinel控制台:http://localhost:8081/
注:访问端口是7777是本工程在配置中心配置的访问端口是7777
配置限流规则
在完成了上面后,我们在erayoo-gateway
服务下,点击簇点链路
菜单,可以看到如下界面:
其中/add
接口,就是我们上一节中实现并调用过的接口。通过点击流控
按钮,来为该接口设置限流规则,比如:
这里做一个最简单的配置:
阈值类型选择:QPS
单机阈值:1
综合起来的配置效果就是,该接口的限流策略是每秒最多允许1个请求进入。
点击新增
按钮之后,可以看到如下界面:
其实就是左侧菜单中流控规则
的界面,这里可以看到当前设置的所有限流策略。
验证限流规则
多次快速访问,就会出现被限流情况(1秒钟内访问超过1次)
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 为例):
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-gateway</artifactId>
- </dependency>
增加配置:
- spring.cloud.sentinel.transport.port=8719
- # sentinel 控制台 sentinel/sentinel
- spring.cloud.sentinel.transport.dashboard=localhost:8080
将上面的service-order模块配置到service-gateway网关模块统一入口,配置路由规则:
- spring.cloud.gateway.routes[0].id=order
- spring.cloud.gateway.routes[0].uri=lb://service-order
- spring.cloud.gateway.routes[0].predicates[0]=Path=/serviceOrder/**
- spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
启动网关应用,通过网关访问刚才那个测试接口:localhost:1234/serviceOrder/test
刷新sentinel控制台,如下:
gateway应用还可以自定义API分组管理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。