建网站详细步骤,wordpress屏蔽自带密码重置,深圳电子商务网站建设公司,wordpress分类名称不显示转载自 Spring Cloud Alibaba基础教程#xff1a;Sentinel使用Apollo存储规则
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则。Apollo是国内用户非常多的配置中心#xff0c;所以#xff0c;今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储…转载自 Spring Cloud Alibaba基础教程Sentinel使用Apollo存储规则
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则。Apollo是国内用户非常多的配置中心所以今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中。
使用Apollo存储限流规则
Sentinel自身就支持了多种不同的数据源来持久化规则配置目前包括以下几种方式
文件配置Nacos配置ZooKeeper配置Apollo配置
本文我们就来一起动手尝试一下如何使用Apollo来存储限流规则。
准备工作
下面我们将同时使用到Apollo和Sentinel Dashboard所以可以先把Apollo和Sentinel Dashboard启动起来。
如果还没入门Sentinel Dashboard可以通过文末的系列目录先学习之前的内容。Apollo的话相对复杂一些这里不做详细介绍了如果还没有接触过Apollo的读者可以查看其官方文档进一步学习。
应用配置
第一步在Spring Cloud应用的pom.xml中引入Spring Cloud Alibaba的Sentinel模块和Apollo存储扩展 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependencydependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-apollo/artifactIdversion1.4.0/version/dependency
/dependencies第二步在Spring Cloud应用中配置的服务信息在resource目录下创建apollo-env.properties文件内容样例
local.metahttp://192.168.0.201:8080
dev.metahttp://192.168.0.202:8080这里需要了解Apollo对多环境的配置这里设置的是每个环境不同的配置服务地址读者需要根据自己的实际情况修改。
第三步在Spring Cloud应用中添加配置信息
spring.application.namesentinel-datasource-apollo
server.port8002# apollo config
app.id${spring.application.name}# sentinel dashboard
spring.cloud.sentinel.transport.dashboardlocalhost:8080# sentinel datasource apollo
spring.cloud.sentinel.datasource.ds.apollo.namespaceNameapplication
spring.cloud.sentinel.datasource.ds.apollo.flowRulesKeysentinel.flowRulesapp.idApollo中的创建的项目名称这里采用spring.application.name参数的引用从而达到服务名与配置项目名一致的效果spring.cloud.sentinel.transport.dashboardsentinel dashboard的访问地址根据上面准备工作中启动的实例配置spring.cloud.sentinel.datasource.ds.apollo.namespaceNameApollo的空间名spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey配置规则的key名称
关于Apollo相关配置的对应关系可见下图所示 第四步创建应用主类并提供一个rest接口比如
EnableApolloConfig
SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}Slf4jRestControllerstatic class TestController {GetMapping(/hello)public String hello() {return didispace.com;}}}其中EnableApolloConfig注解是开启Apollo的配置加载功能。
第五步Apollo中配置限流规则具体可见第三步的截图中的样子。其中key值的内容是下面的json
[{resource: /hello,limitApp: default,grade: 1,count: 5,strategy: 0,controlBehavior: 0,clusterMode: false}
]可以看到上面配置规则是一个数组类型数组中的每个对象是针对每一个保护资源的配置对象每个对象中的属性解释如下
resource资源名即限流规则的作用对象limitApp流控针对的调用来源若为 default 则不区分调用来源grade限流阈值类型QPS 或并发线程数0代表根据并发数量来限流1代表根据QPS来进行流量控制count限流阈值strategy调用关系限流策略controlBehavior流量控制效果直接拒绝、Warm Up、匀速排队clusterMode是否为集群模式
这里我们只做简单的配置解释以便于理解这里的配置作用。实际上这里还有非常多可配置选项和规则更复杂的配置后面我们单独开一篇来深入学习。
第六步启动应用。如果一些顺利可以看到类似下面的日志代表已经成功从Nacos加载了一条限流规则
2019-04-18 23:56:11.278 INFO 29149 --- [ main] o.s.c.a.s.c.SentinelDataSourceHandler : [Sentinel Starter] DataSource ds-sentinel-apollo-datasource start to loadConfig
2019-04-18 23:56:11.279 INFO 29149 --- [ main] o.s.c.a.s.c.SentinelDataSourceHandler : [Sentinel Starter] DataSource ds-sentinel-apollo-datasource load 1 FlowRule通过postman或者curl访问几下localhost:8002/hello接口
$ curl localhost:8002/hello
didispace.com此时在Sentinel Dashboard中就可以看到当前我们启动的sentinel-datasource-apollo服务。点击左侧菜单中的流控规则可以看到已经存在一条记录了这条记录就是上面我们在Apollo中配置的限流规则。
深入思考
在使用Apollo存储规则配置的时候与Nacos存储一样对于Sentinel控制台这些数据是只读的也就是说
Sentinel控制台中修改规则仅存在于服务的内存中不会修改Apollo中的配置值重启后恢复原来的值。Nacos控制台中修改规则服务的内存中规则会更新Apollo中持久化规则也会更新重启后依然保持。
代码示例
本文介绍内容的客户端代码示例读者可以通过查看下面仓库中的alibaba-sentinel-datasource-apollo项目
Githubhttps://github.com/dyc87112/SpringCloud-Learning/Giteehttps://gitee.com/didispace/SpringCloud-Learning/
如果您对这些感兴趣欢迎star、follow、收藏、转发给予支持
参考资料
下面是Sentinel的仓库地址与官方文档读者也可以自己查阅文档学习
GithubSentinel官方文档动态规则Spring Cloud Alibaba Sentinel文档