从nacos注册中心|分布式配置中心开始刚学到sentinel,实践过程中遇到一些问题,记录一下
官方文档:
https://sentinelguard.io/zh-cn/index.html
github:
https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
控制台下载:
https://github.com/alibaba/Sentinel/releases
--启动命令 java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jarspringcloud中使用:
https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
社区解决方案:
https://github.com/sentinel-group/sentinel-awesome
1.springcloud微服务架构(nacos分布式配置中心、nacos服务注册于发现、sentinel、feign)
2.整合nacos数据持久化规则
3.sentinel对feign的支持
github:https://github.com/xiaxin07/xiaxin-spring-cloud-alibaba-sentinel-demo.git
1.接入sentinel-dashboard配置要加spring.cloud.sentinel.eager=true,如下配置:
spring: cloud: sentinel: transport: port: 8719 dashboard: localhost:8080 eager: true #不加的话会有问题,具体表现为接入时间变成,重启就要等待一会儿才能在控制台看到服务2.sentinel对feign的支持要引入groupId为com.alibaba.cloud的maven依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.2.3.RELEASE</version> </dependency>具体原因查看:https://blog.csdn.net/weixin_40240756/article/details/109200280
注:测试的时候将user服务停掉,此时会出现fallback的降级提示
3.fallback 函数签名和位置要求:
返回值类型必须与原函数返回值类型一致;
方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
code:
@Service public class UserService { @SentinelResource(value = "sayHello", blockHandlerClass = {FlowService.class}, blockHandler = "blockHandler") public String sayHello(String name) { return "Hello, " + name; } } public class FlowService { // Block 异常处理函数,参数最后多一个 BlockException,其余与原函数一致. public static String blockHandler(String name, BlockException ex) { // Do some log here. ex.printStackTrace(); return "被限流了,请稍后重试!"; } }注:具体查看官方文档中关于注解的注解支持模块:https://sentinelguard.io/zh-cn/docs/annotation-support.html
4.nacos数据持久化
官方好像不支持推模式(https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel#Push%E6%A8%A1%E5%BC%8F),也就是下方图片上的sentinel dashboard-->nacos->sentinel客户端,需要自己对sentinel-dashboard源码做一些修改,具体思路就是找到添加/修改相关规则的mvc方法,使用spring事件发布方式,将具体规则推送到nacos,这里涉及到nacos的接口(https://nacos.io/zh-cn/index.html,里面有使用调用接口方式修改配置的http,找一下)
AHAS Sentinel 控制台是支持的,具体使用可以查看官方文档(https://github.com/alibaba/Sentinel/wiki/AHAS-Sentinel-%E6%8E%A7%E5%88%B6%E5%8F%B0)