下载地址:Sentinel下载
java -Dserver.port=8080 -jar sentinel-dashboard-1.7.1.jar
(Sentinel端口默认是8080,可通过-Dserver.port
指定端口)。cloud-sentinel-service-9010
<!-- nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
server:
port: 9010
spring:
application:
name: sentinel-service
cloud:
nacos:
discovery:
server-addr: 192.168.74.130:8848 #naocs地址
sentinel:
transport:
dashboard: 192.168.74.130:8080 #sentinel地址
port: 8719 #端口配置会在应用对应的机器上启动一个Http Server,该Server会与Sentinel控制台做交互。默认8719,被占用会从8719开始依次+1扫描,直到终点未被使用端口。
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
@SpringBootApplication
@EnableDiscoveryClient
public class SentinalServiceMain {
public static void main(String[] args) {
SpringApplication.run(SentinalServiceMain.class,args);
}
}
@RestController
@Slf4j
public class SentinalController {
@GetMapping("/getA")
public String getA(){
log.info("Hello -- A");
return "Hello -- A";
}
@GetMapping("/getB")
public String getB(){
log.info("Hello -- B");
return "Hello -- B";
}
}
资源名:唯一名称,默认请求路径
针对来源:Sentinel可以根据调用者进行限流,填写微服务名,默认default(不区分来源)
阈值类型/单击阈值:
是否集群:勾选则是集群
流控模式
流控效果(仅QPS)
Sentinel的断路器是没有半开状态的
阈值(以 ms 为单位)
,那么在接下的时间窗口(以 s 为单位)
之内,对这个方法的调用都会自动地熔断阈值
之后,资源进入降级状态,即在接下的时间窗口(以 s 为单位)
之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%阈值
之后会进行熔断。,若 时间窗口小于 60s,则结束熔断状态后仍可能再进入熔断状态maxQps * minRt
估算得出。设定参考值一般是 CPU cores * 2.5
@GetMapping("/getResource")
@SentinelResource(value = "byResource",blockHandler = "handleException")
public Result getByResource(){
return new Result(200,"Success","getByResource");
}
public Result handleException(BlockException blockException){
return new Result(444,"资源名称限流","handleException");
}
static
修饰)public class MyBlockHandler {
public static Result myBlockHandlerException(BlockException blockException){
return new Result(444,"自定义限流","myBlockHandlerException");
}
@GetMapping("/getMyResource")
@SentinelResource(value = "myResource",blockHandlerClass = MyBlockHandler.class, blockHandler = "myBlockHandlerException")
public Result getByMyResource(){
return new Result(200,"Success","getByResource");
}
value
:资源名称,必需项(不能为空)entryType
:entry 类型,可选项(默认为 EntryType.OUT)blockHandler / blockHandlerClass
:主管配置违规
。blockHandler 对应处理 BlockException
的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static
函数,否则无法解析。fallback / fallbackClass
:管运行异常
。fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常
(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。defaultFallback(since 1.6.0)
:默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。exceptionsToIgnore(since 1.6.0)
:用于指定哪些异常被排除掉
,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。重启应用,Sentinel规则会消失,生产环境需要将配置规则进行持久。
<!-- 持久化进nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
spring:
application:
name: sentinel-service
cloud:
nacos:
discovery:
server-addr: 192.168.74.130:8848
sentinel:
transport:
dashboard: 192.168.74.130:8080
port: 8719 #端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互
datasource:
ds1:
nacos:
server-addr: 192.168.74.130:8848
dataId: sentinel-service
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow #流控规则
"resource":"myResource", #资源名称
"limitApp":"default", #针对来源
"grade":1, #阈值类型,0表示线程数,1表示QPS
"count":1, #单机阈值
"strategy":0, #流控模式,0表示直接,1表示关联,2表示链路
"controlBehavior":0, #流控效果,0表示快速失败,1表示Warn Up,2表示排队等待
"clusterMode":false #是否集群