Spring Cloud Alibaba 随记

官方项目文档

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下载)

  1. 首先需要获取 Sentinel 控制台,支持直接下载和源码构建两种方式。

    1. 直接下载:下载 Sentinel 控制台
    2. 源码构建:进入 Sentinel Github 项目页面,将代码 git clone 到本地自行编译打包,参考此文档
  2. 启动控制台,执行 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配置偶尔会失效。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章