上一篇我们介绍了如何通过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存储规则相关推荐

  1. Spring Cloud Alibaba基础教程版本升级:0.2.1-gt;0.2.2

    最近Spring Cloud Alibaba发布了最新版本,其中包含了一些比较重要的内容,比如:Nacos 1.0.0支持,Dubbo的支持等.所以把之前的系列文章中内容以及代码案例都做了升级,其中包 ...

  2. Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Apollo

    在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时,在文末的思考中,我都指出了这两套整合方案都存在一个不足之处:不论采用什么配置中心,限流规则都只能 ...

  3. Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos

    上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...

  4. Spring Cloud Alibaba基础教程:Nacos的数据持久化

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  5. Spring Cloud Alibaba基础教程:Nacos的数据持久化 1

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  6. Spring Cloud Alibaba基础教程:Nacos的集群部署

    点击蓝色"程序猿DD"关注我哟 <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> ...

  7. Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

    自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...

  8. Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0

    Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要 ...

  9. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

最新文章

  1. Linux网络编程中的几组类似功能的区别
  2. SAP PM入门系列32 - S_ALR_87013432 Display Confirmations
  3. C# 中的 sealed(密封) 关键字
  4. Android应用权限管理总结
  5. 揭开数字货币交易所“日入千万”的神秘面纱
  6. microsoftonenote_Microsoft
  7. 轻量级锁的加锁和解锁逻辑
  8. android的padding属性,以编程方式获取android:padding属性
  9. 八个使前端工程师惊艳的效果设计,码否?
  10. c语言遍历文件内容_C语言学习第28篇---动态内存分配剖析
  11. [Web Chart系列之五] 4. 实战draw2d(Raphael)之取消Chrome中Label Text 全部选中
  12. 分析如何查找Linux死机的原因
  13. python 文件行数_python—文件和数据(文件行数 文件字符分布)
  14. Rainbow Tables
  15. Julia: Dates =DateFormat, format,parse.......
  16. C++ Log4Cpp 使用
  17. 【OpenCV4】fatal error: opencv2/core.hpp: No such file or directory 解决方法
  18. 公网远程Everything快速搜索私有云资料【内网穿透】
  19. 怎么把外部参照合并到图纸_如何在CAD制图中将两个图合并到一个图纸上
  20. 先思索后动笔:论讨论与结论的区别

热门文章

  1. Unity Camera的两种模式
  2. Lua语法基础(1)---简介、基本数据类型、表达式
  3. Jquery对象和DOM对象---Jquery API (1)
  4. CentOS 下安装xdebug
  5. 【转】android 中如何限制 EditText 最大输入字符数
  6. .balignl 16,0xdeadbeef浅析
  7. bi数据分析师_BI工程师和数据分析师的5个格式塔原则
  8. Siamese网络(孪生神经网络)详解
  9. leetcode79. 24 点游戏
  10. leetcode面试题 10.03. 搜索旋转数组(二分法)