参考官方文档:https://github.com/alibaba/Sentinel/wiki/%E9%9B%86%E7%BE%A4%E6%B5%81%E6%8E%A7#%E7%A4%BA%E4%BE%8B
参考官方项目:https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-cluster
ncaos 参考文档:https://www.bookstack.cn/read/sentinel-v1.7/39e61ead78232553.md
Sentinel 集群限流服务端有两种启动方式:
1,独立模式(Alone),即作为独立的 token server 进程启动,独立部署,隔离性好,但是需要额外的部署操作。独立模式适合作为 Global Rate Limiter 给集群提供流控服务。
2,嵌入模式(Embedded),即作为内置的 token server 与服务在同一进程中启动。在此模式下,集群中各个实例都是对等的,token server 和 client 可以随时进行转变,因此无需单独部署,灵活性比较好。但是隔离性不佳,需要限制 token server 的总 QPS,防止影响应用本身。嵌入模式适合某个应用集群内部的流控。
使用 第三章 nacosa项目,实现嵌入模式
本地启动nacos服务
本地启动sentinel控制台服务
(1)pom
(2)将官方项目sentinel-demo-cluster有用的类拿过来,其中 com.alibaba.csp.sentinel.init.InitFunc 的内容是 DemoClusterInitFunc 类所在的全路径
(3)简单修改DemoClusterInitFunc类,改为Properties 加载nacos里的 配置信息,且信息实时更新
(4)DemoClusterInitFunc类中四个常量
//限流规则
private final StringflowDataId =APP_NAME + DemoConstants.FLOW_POSTFIX;
//限流规则
private final StringparamDataId =APP_NAME + DemoConstants.PARAM_FLOW_POSTFIX;
//client配置
private final StringconfigDataId =APP_NAME +"-cluster-client-config";
//设置token server,client
private final StringclusterMapDataId =APP_NAME + DemoConstants.CLUSTER_MAP_POSTFIX;
(5)在nacos中配置
上面截图,不要使用localhost,使用ip
(6)启动实例,启动配置项参考 https://www.bookstack.cn/read/sentinel-v1.7/27476bd330878602.md
-Dserver.port=9100
-Dproject.name=nacosa
-Dcsp.sentinel.log.use.pid=true
-Dcsp.sentinel.dashboard.server=localhost:8999
-Dcsp.sentinel.api.port=9101
-Dserver.port=9200
-Dproject.name=nacosa
-Dcsp.sentinel.log.use.pid=true
-Dcsp.sentinel.dashboard.server=localhost:8999
-Dcsp.sentinel.api.port=9201
(7)查看sentinel控制台
(8)访问 http://localhost:9000/nacosa/helloWorld3,返回 Blocked by Sentinel (flow limiting),说明已经生效
(9)本地写一个测试并发类,每秒200个请求,这个时候在查看 sentinel控制台
本地启用了2个nacosa 实例,对source资源 helloWorld3的qps配置是为1,所以通过的最多也就是2。
gateway服务,发现并无拒绝,是因为在gateway服务中,对rousce 资源nacosa 的qps配置比较大
项目地址:https://github.com/renzheyizhe/demo/tree/master/nacos-a