熔断限流(Sentinel)
概述
Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性,可以简单的分为 Sentinel 核心库和 Dashboard。
适用范围
Pangea v2.0.1.6+
快速上手
1、添加依赖
Sentinel的starter依赖已经添加到了盘古common-core核心包中,使用时,引入common包即可。
html
<!--pangea核心组件包 -->
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-core</artifactId>
<version>${pangea.version}</version>
</dependency>
2、Feign中整合Sentinel
feign:
sentinel:
enabled: true
注意
只有开启了sentinel对feign的支持才可以实现自动配置
3、自定义需要调用的FeignClient
jsx
@FeignClient(name = "user-service", fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
@GetMapping("/user/get")
public String getUser(@RequestParam("id") Long id);
}
4、定义 fallback 类 UserFeignClientFallback
jsx
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override
public String getUser(Long id) {
return "fallback";
}
}
5、feign的接口调用
jsx
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/testFeign")
public String testFeign() {
return userFeignClient.getUser(1L);
}
接入控制台
1、添加依赖
使用 sentinel 的服务中引入 sentinel-transport 的依赖,因为我们的应用是作为客户端,通过transport模块与控制台进行通讯的,依赖如下所示:
html
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>x.y.z</version>
</dependency>
2、配置启动参数
可通过 properties 文件指定,配置文件的路径为 ${user_home}/logs/csp/${project.name}.properties
3、触发客户端连接控制台
触发一次客户端的规则才会开始进行初始化,并向控制台发送心跳和客户端规则等信息。客户端与控制台的连接初始化是在 Env 的类中触发的,即代码中的 InitExecutor.doInit()
html
public class Env {
public static final NodeBuilder nodeBuilder = new DefaultNodeBuilder();
public static final Sph sph = new CtSph();
static {
// If init fails, the process will exit.
InitExecutor.doInit();
}
}
4、埋点
html
public class Env {
@GetMapping("/testSentinel")
public @ResponseBody
String testSentinel() {
String resourceName = "testSentinel";
Entry entry = null;
String retVal;
try{
entry = SphU.entry(resourceName,EntryType.IN);
retVal = "passed";
}catch(BlockException e){
retVal = "blocked";
}finally {
if(entry!=null){
entry.exit();
}
}
return retVal;
}
5、连接控制台
应用接入 transport 模块之后,主动访问 /testSentinel 接口,客户端会主动连接上控制台,并将自己的ip等信息发送给控制台,并且会与控制台维持一个心跳。客户端连接上dashboard之后,可以定义的资源配置规则。