初探 Spring Cloud Alibaba Sentinel 服务流量控制台

Posted by 彭超 on 2020-02-02
Estimated Reading Time 3 Minutes
Words 766 In Total
Viewed Times

简介

Sentinel 控制台提供一个轻量级的控制台,Sentinel 以流量为切入点,提供 机器发现单机资源实时监控集群资源汇总,以及 规则管理 的功能。

部署 Sentinel 控制台

引入依赖

在统一依赖管理项目中继承 Spring Boot 2.0.6.RELEASE 父项目,并声明 Spring Cloud Alibaba 0.2.1.RELEASE 依赖版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

在当前项目 pom.xml 中主要添加依赖 com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel

1
2
3
4
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

相关配置

application.yml 文件中配置 Sentinel 地址:

1
2
3
4
5
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080

实现限流功能

限流的方式

Sentinel 支持以下两种方式对限流进行埋点:

根据资源名称限流

通过注解 @SentinelResource 对项目中某个方法进行限流,示例代码如下:

1
2
3
4
@SentinelResource("byResource")
public String echo(String str) {
return str;
}

由于 Sentinel 采用的懒加载规则,我们需要先访问下接口,在 Sentinel 控制台中才会有对应服务信息。

然后在 Sentinel 控制台中根据注解 @SentinelResourcevalue 值进行对应的配置。

最后快速访问上面的接口,可以发现返回限流处理信息:

根据 URL 限流

除了以上的方式,还可以根据 url 配置流控规则:

自定义限流处理逻辑

同样我们也可以实现自己的一套限流处理逻辑,然后在 @SentinelResource 注解中指定即可。

创建 CustomBlockHandler 类实现具体处理逻辑:

1
2
3
4
5
6
public class CustomBlockHandler {

public String handleException(BlockException exception){
return "自定义限流信息";
}
}

Controller 控制层中使用自定义限流处理逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@RequestMapping("/rateLimit")
public class RateLimitController {

/**
* 自定义通用的限流处理逻辑
*/
@GetMapping("/customBlockHandler")
@SentinelResource(value = "customBlockHandler", blockHandler = "handleException",blockHandlerClass = CustomBlockHandler.class)
public String blockHandler() {
return "限流成功";
}

}

实现熔断功能

Sentinel 支持对服务间调用进行保护,对故障应用进行熔断操作。

Controller 控制层中创建熔断方法:

1
2
3
public String handleFallback() {
return "服务降级返回";
}

通过 @SentinelResource 注解的 fallback 属性配置使用熔断方法,值为方法名:

1
@SentinelResource(value = "fallback",fallback = "handleFallback")

另外可以通过 @SentinelResource 注解的 exceptionsToIgnore 属性指定特殊异常取消熔断。

注:如果与 Feign 结合使用,需要添加以下配置

application.yml 中打开 SentinelFeign 的支持:

1
2
3
feign:
sentinel:
enabled: true

Application 启动类上添加 @EnableFeignClients 注解启动 Feign 的功能。


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !