Sentinel
- 简介
- 他可以做什么
- 他是谁开发的
- 集成 Sentinel
- Pom
- Java 类 config
- application.propertier 配置
- 安装 Sentinel 的 Dashboard
- jar 的 启动
- 如何使用
- 注解使用
- try 代码块的使用
- 链路使用
- 开启对 feign
简介
Spring Cloud Alibaba 的一个组件,支持对服务的熔断、限流
sentinel 是阿里巴巴的一个开源 cloud 的解决方案方案中的熔断和限流组件。
集成 Sentinel
先引入POM文件
<!-- Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
Java 类 config
/**
* 配置 Sentinel 的统一返回格式
**/
@Configuration
class MySentinelConfig {
public MySentinelConfig() {
WebCallBackManager.setUrlBlockHandler((request, response, e) -> {
// 设置响应的编码格式
response.setCharacterEncoding("UTF-8");
// 设置响应的数据类型格式
response.setContentType("application/json");
// 设置响应的内容
response.getWrite().write(JSON.toJSONstring(R.error(ErrorCodeNum.TOO_MANY_REQUEST.getCODE(), ErrorCodeNum.TOO_MANY_REQUEST.getDESC())));
});
}
}
application.properties 的配置
# sentinel 的端口配置
spring.cloud.sentinel.transport.port=8719
# sentinel 的控制台的路径配置
spring.cloud.sentinel.transport.dashboard=127.0.0.1:8333
# 为了让 Sentinel 的 dashboard 显示实时数据需要开启这个
management.endpoints.web.exposure.include=*
Sentinel Dashboard
下载 Sentinel Dashboard
首先要找到自己的引入的 sentinel 的版本是多少然后去 Github 下载
我这边的是Sentinel的1.6.3所以去下载响应的版本即可
https://github.com/alibaba/Sentinel/releases
找到自己的版本去下载即可
启动 Dashboard
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAWqgVrJ-1611481809250)(C:\Users\L\AppData\Roaming\Typora\typora-user-images\image-20210124145958102.png)]
# 我这边由于 8080 端口被占用。所以从新设置了启动端口为8333
java -jar java -jar sentinel-dashboard-1.7.1.jar --server.port=8333
如何使用
其实当我们配置好上面这些的时候我们就可以正常启动和使用了。但是他还又其他的使用方式
- 注解、代码快
代码块的方式
try(Entry entry = SphU.entry("resourcesName")) {
// TODO 你的资源代码【被保护的业务逻辑】
} cache (BlockException e) {
// 资源访问阻止,被限流或被降级
// 在此处进行相应的处理操作
}
注解的方式
// 原本的业务方法.
@SentinelResource(blockHandler = "blockHandlerForGetUser")
public User getUserById(String id) {
throw new RuntimeException("getUserById command failed");
}
// blockHandler 函数,原方法调用被限流/降级/系统保护的时候调用
public User blockHandlerForGetUser(String id, BlockException ex) {
return new User("admin");
}
对 feign 的支持
feign.sentinel.enabled=true