apollo持久化sentinel_Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则。Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中。
使用Apollo存储限流规则
Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式:
文件配置
ZooKeeper配置
本文我们就来一起动手尝试一下,如何使用Apollo来存储限流规则。
准备工作
下面我们将同时使用到Apollo和Sentinel Dashboard,所以可以先把Apollo和Sentinel Dashboard启动起来。
如果还没入门Sentinel Dashboard可以通过文末的系列目录先学习之前的内容。Apollo的话相对复杂一些,这里不做详细介绍了,如果还没有接触过Apollo的读者可以查看其官方文档进一步学习。
应用配置
第一步:在Spring Cloud应用的pom.xml中引入Spring Cloud Alibaba的Sentinel模块和Apollo存储扩展:
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.csp
sentinel-datasource-apollo
1.4.0
复制代码
第二步:在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项目:
如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!
参考资料
下面是Sentinel的仓库地址与官方文档,读者也可以自己查阅文档学习:
系列回顾
专题推荐
apollo持久化sentinel_Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则相关推荐
- Spring Cloud Alibaba基础教程版本升级:0.2.1-gt;0.2.2
最近Spring Cloud Alibaba发布了最新版本,其中包含了一些比较重要的内容,比如:Nacos 1.0.0支持,Dubbo的支持等.所以把之前的系列文章中内容以及代码案例都做了升级,其中包 ...
- Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Apollo
在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时,在文末的思考中,我都指出了这两套整合方案都存在一个不足之处:不论采用什么配置中心,限流规则都只能 ...
- Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos
上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...
- Spring Cloud Alibaba基础教程:Nacos的数据持久化
<Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...
- Spring Cloud Alibaba基础教程:Nacos的数据持久化 1
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- Spring Cloud Alibaba基础教程:Nacos的集群部署
点击蓝色"程序猿DD"关注我哟 <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> ...
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...
- Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0
Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要 ...
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
<Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...
最新文章
- Linux网络编程中的几组类似功能的区别
- SAP PM入门系列32 - S_ALR_87013432 Display Confirmations
- C# 中的 sealed(密封) 关键字
- Android应用权限管理总结
- 揭开数字货币交易所“日入千万”的神秘面纱
- microsoftonenote_Microsoft
- 轻量级锁的加锁和解锁逻辑
- android的padding属性,以编程方式获取android:padding属性
- 八个使前端工程师惊艳的效果设计,码否?
- c语言遍历文件内容_C语言学习第28篇---动态内存分配剖析
- [Web Chart系列之五] 4. 实战draw2d(Raphael)之取消Chrome中Label Text 全部选中
- 分析如何查找Linux死机的原因
- python 文件行数_python—文件和数据(文件行数 文件字符分布)
- Rainbow Tables
- Julia: Dates =DateFormat, format,parse.......
- C++ Log4Cpp 使用
- 【OpenCV4】fatal error: opencv2/core.hpp: No such file or directory 解决方法
- 公网远程Everything快速搜索私有云资料【内网穿透】
- 怎么把外部参照合并到图纸_如何在CAD制图中将两个图合并到一个图纸上
- 先思索后动笔:论讨论与结论的区别
热门文章
- Unity Camera的两种模式
- Lua语法基础(1)---简介、基本数据类型、表达式
- Jquery对象和DOM对象---Jquery API (1)
- CentOS 下安装xdebug
- 【转】android 中如何限制 EditText 最大输入字符数
- .balignl 16,0xdeadbeef浅析
- bi数据分析师_BI工程师和数据分析师的5个格式塔原则
- Siamese网络(孪生神经网络)详解
- leetcode79. 24 点游戏
- leetcode面试题 10.03. 搜索旋转数组(二分法)