程序猿 dd 2019-04-21 17:13:58 浏览 173 评论 1
spring
配置
控制台
Blog
alibaba
存储
- GitHub
- Spring-cloud
- spring-cloud-alibaba
- apollo
摘要: 上一篇我们介绍了如何通过 Nacos 的配置功能来存储限流规则. Apollo 是国内用户非常多的配置中心, 所以, 今天我们继续说说 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 存储扩展:
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba.csp</groupId>
- <artifactId>sentinel-datasource-apollo</artifactId>
- <version>1.4.0</version>
- </dependency>
- </dependencies>
第二步: 在 Spring Cloud 应用中配置的服务信息, 在 resource 目录下, 创建 apollo-env.properties 文件, 内容样例:
- local.meta=http://192.168.0.201:8080
- dev.meta=http://192.168.0.202:8080
这里需要了解 Apollo 对多环境的配置, 这里设置的是每个环境不同的配置服务地址, 读者需要根据自己的实际情况修改.
第三步: 在 Spring Cloud 应用中添加配置信息:
- spring.application.name=sentinel-datasource-apollo
- server.port=8002
- # apollo config
- App.id=${
- spring.application.name
- }
- # sentinel dashboard
- spring.cloud.sentinel.transport.dashboard=localhost:8080
- # sentinel datasource apollo
- spring.cloud.sentinel.datasource.ds.apollo.namespaceName=application
- spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey=sentinel.flowRules
App.id:Apollo 中的创建的项目名称, 这里采用
spring.application.name
参数的引用, 从而达到服务名与配置项目名一致的效果
spring.cloud.sentinel.transport.dashboard
:sentinel dashboard 的访问地址, 根据上面准备工作中启动的实例配置
spring.cloud.sentinel.datasource.ds.apollo.namespaceName
:Apollo 的空间名
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);
- }
- @Slf4j
- @RestController
- static 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 项目:
GitHub:
Gitee:
如果您对这些感兴趣, 欢迎 star,follow, 收藏, 转发给予支持!
参考资料
下面是 Sentinel 的仓库地址与官方文档, 读者也可以自己查阅文档学习:
GitHub https://github.com/alibaba/Sentinel
Sentinel 官方文档: 动态规则
Spring Cloud Alibaba Sentinel 文档
专题推荐
Spring Boot 基础教程
Spring Cloud 基础教程 http://blog.didispace.com/spring-cloud-learning/
来源: https://yq.aliyun.com/articles/699190