官方项目文档
https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
测试项目
https://gitee.com/sw008/SpringCloudAlibaba_test/tree/master
Nacos
1 控制台地址在Nacos-server(github下载)启动时会暴露。
2 在控制台可以控制服务下线/上线/权重,但是会有延迟。因为客户端在下次同步服务列表时才会感知。
Sentinel
官方文档:
https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
https://github.com/alibaba/Sentinel/wiki/如何使用
Sentinel可以为"/hello"或"re"做流控配置
1 旧版本BUG
@RequestMapping("/hello")
public String sayHello(){
//直接调用方法aop失效
return doHello();
}
//AOP实现
@SentinelResource("re")
public String doHello(){
return "hello";
}
2 @SentinelResource降级熔断
官方文档:https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81
https://blog.csdn.net/a772304419/article/details/99689562
Sentinel控制台
启动
(官方github下载)
-
首先需要获取 Sentinel 控制台,支持直接下载和源码构建两种方式。
- 直接下载:下载 Sentinel 控制台
- 源码构建:进入 Sentinel Github 项目页面,将代码 git clone 到本地自行编译打包,参考此文档。
-
启动控制台,执行 Java 命令
java -jar sentinel-dashboard.jar
完成 Sentinel 控制台的启动。 控制台默认的监听端口为 8080。
若下载官方编译好的sentinel-dashboard.jar启动报错,则需要git clone sentinel项目,找到sentinel-dashboard子模块(springboot)运行main()方法启动。
配置
1、每次设置规则只对同名服务集群中一台机器的资源生效。同样的服务可以为不同进程配置不同规则。
2、上图中左侧是服务列表,点击一个服务名可以看到监控+链路+规则等选项。
3、上图中显示demo-consumer服务中一台服务实例/进程的请求情况。QPS等信息只记录短时间过期重置为0。
上图中标出各个链路对应demo-consumer中的信息。测试代码:https://gitee.com/sw008/SpringCloudAlibaba_test/tree/master/demo-consumer
4、为对应的资源配置流量、降级、热点、授权规则。
流控:超过标准会抛出FlowException
注意:如上图有多个URL匹配@GetMapping(value = "/consumer-feign/{str}")。如果针对图中的url做限流规则,只会影响到一种url请求。比如对/consumer-feign/123做限流规则不会影响/consumer-feign/456请求。如果想控制所有符合/consumer-feign/{str}规则的请求。 推荐对这种Mapping增加@SentinelResource统一资源挂载点。然后针对@SentinelResource做限流
/**
* @SentinelResource 资源埋点
* 通过AOP包装被标注方法,监控其执行时间等信息
* 注解说明 https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81
* @param str
* @return
*/
@GetMapping(value = "/consumer-feign/{str}")
@SentinelResource(value = "demo-consumer/consumer-feign",blockHandler = "blockHandler",fallback = "fallHandler")
public String feign(@PathVariable String str) {
//fegin
return echoService.echo(str);
}
/**
* 原方法调用被配置的流控规则限流时触发BlockException,调用blockHandler
* @param str 原方法参数
* @param ex 异常
* @return
*/
public String blockHandler(String str, BlockException ex) {
return "Sentinel-blockback "+str;
}
/**
* 原方法调用触发配置的降级规则时抛出DegradeException,调用fallback
* fallback还可以捕获业务异常
* @param str
* @return
*/
public String fallHandler(String str) {
return "Sentinel-fallback "+str;
}
5 降级处理
@FeignClient和@SentinelResource都可以配置降级,但是在Sentinel环境下推荐使用@SentinelResource配置。测试时@FeignClient的fallback配置偶尔会失效。