摘要
入门级的使用sentinel。
入门示例
服务端启动sentinel-dashboard
- 下载 sentinel 源码
- 启动 dashboard。 run DashboardApplication 的main方法,
- 登录dashboard . 默认端口是 8080,默认账号密码是 sentinel、sentinel。这个可以在application.properties文件中配置。
效果如下:
刚开始这里是没有数据的。 等后续有限流数据上报这里才会有数据展示。
客户端应用接入sentinel dashboard
引入jar
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.7.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.7.2-SNAPSHOT</version>
</dependency>
示例代码
下面的例子是一个简单的qps限流策略。
@RequestMapping("sentinel")
public String sentinel() {
initFlowRules();
String resourceName = "testSentinel";
Entry entry = null;
String retVal;
try {
entry = SphU.entry(resourceName, EntryType.IN);
retVal = "passed";
}catch(Exception e) {
retVal = "blocked";
}finally {
if(entry != null) {
entry.exit();
}
}
return retVal;
}
private static void initFlowRules(){
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("testSentinel");// 资源名称
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //qps 降级
rule.setCount(2); // 每秒 2次,超过2次就失败
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
属性配置
属性可以通过jvm参数注入,也可以通过 classpath:sentinel.properties 配置。但是project.name这个当前版本只支持jvm参数注入,不支持配置在sentinel.properties文件里面。所以建议通过jvm注入。
jvm参数注入:
-Dproject.name=sentinel-demo -Dcsp.sentinel.dashboard.server=127.0.0.1:8080 -Dcsp.sentinel.api.port=8081
sentinel.properties 里面
# 本地http服务端口
csp.sentinel.api.port=8081
# dashboard 访问IP:port
csp.sentinel.dashboard.server=127.0.0.1:8080
#客户端向dashboard 发送心跳包的时间间隔,单位毫秒
csp.sentinel.heartbeat.interval.ms=1000
# 当前版本 1.7 ,只能通过jvm 参数注入,不能配置在这里 -Dproject.name=sentinel-demo
#project.name=sentinel-demo
更多参数配置见参考文档。
启动之后 效果如下:
查看客户端阻塞日志
阻塞日志默认是放在 ${user.home}/logs/csp/sentinel-block.log 这个文件里。这里的日志记录只有发生阻塞了才有,不是每次请求都有日志。
比如我本地就是这个文件:
/Users/**/logs/csp/sentinel-block.log
日志格式如下:
时间戳 | 该秒发生的第一个资源 | 资源名称,拦截的原因,接口调用来源,|被拦截资源的调用者,被拦截的数量,最后的0没有意义
2020-03-11 23:53:00|1|testSentinel,FlowException,default,|3,0
详细介绍参考:日志
查看客户端统计日志
文件是 ${user.home}/logs/csp/${appName}-metrics.log.${date},我本地是这个
/Users/michaelfeng/logs/csp/sentinel-demo-metrics.log.2020-03-11
日志格式:
时间戳|时间|资源|通过的请求|阻止的请求数|成功执行完成的请求数|用户自定的异常|平均响应时长
1583943002000|2020-03-12 00:10:02|testSentinel|1|0|1|0|0|0|0|0
1583943002000|2020-03-12 00:10:02|__total_inbound_traffic__|1|0|1|0|0|0|0|0
这里每一行代表一秒的统计数据。 有数据才会落一行日志,没有数据则不落日志。
业务日志
其它的日志在 ${user_home}/logs/csp/sentinel-record.log.xxx 里。该日志包含规则的推送、接收、处理等记录,排查问题的时候会非常有帮助。