改造背景

前面我们讲解了如何对接Apollo来持久化限流的规则,对接后可以直接通过Apollo的后台进行规则的修改,推送到各个客户端实时生效。

但还有一个问题就是Sentinel控制台没有对接Apollo,Sentinel控制台本来就可以修改限流的规则,目前存在的情况就是通过Sentinel控制台修改的配置无法更新到Apollo中,所以今天我们的主题是改造Sentinel控制台源码,对接Apollo。

配置变更模式

最原始的模式如下图:

Dashboard的推送规则方式是通过 API 将规则推送至客户端并直接更新到内存中,这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能用于生产环境。

我们在生产环境中需要用Push模式来进行,对于 push 模式的数据源,如远程配置中心(ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。因此推送规则正确做法应该是 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel,而不是经 Sentinel 数据源推送至配置中心。这样的流程就非常清晰了:

改造步骤

从 Sentinel 1.4.0 开始,我们抽取出了接口用于向远程配置中心推送规则以及拉取规则:

  • DynamicRuleProvider: 拉取规则
  • DynamicRulePublisher: 推送规则

我们只需要实现上面的两个规则即可实现我们想要的效果,官方对于Nacos 和 Apollo 的推送和拉取规则已经有实现好了的代码,在Dashboard源码的test目录下,我们自己改造下就可以了。

首先我们需要把源代码拉到本地,导入开发工具中,找到下面的Apollo的代码:

这部分代码是在test包下,我们需要复制到main包下才行:

复制过去后会发现一个问题,所有Apollo相关的import都报错,需要改下pom.xml中的配置,把scope注释掉:

  <!-- for Apollo rule publisher sample --><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-openapi</artifactId><version>1.2.0</version><!--<scope>test</scope>--></dependency>

ApolloConfig中需要修改的有PortalUrl和token:

 @Beanpublic ApolloOpenApiClient apolloOpenApiClient() {ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder().withPortalUrl("http://localhost:10034").withToken("token").build();return client;}

token的生成需要去Apollo的Portal中进行生成

创建应用信息,生成token,绑定appid

FlowRuleApolloProvider和FlowRuleApolloPublisher需要把Apollo的appId,env,命名空间等改成你自己想用的才行。这边就不贴代码了。

改造完之后,我们需要让控制器使用这两个新的规则,修改FlowControllerV2的@Qualifier的值,注入对应的规则对象

@Autowired
@Qualifier("flowRuleApolloProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;@Autowired
@Qualifier("flowRuleApolloPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

这样改完其实还没效果,因为页面上用的是FlowControllerV1的代码,你可以直接在访问uri后面加上v2来访问,但这不是很好,最好是改下页面的代码,让菜单直接跳转到新的页面去,找到下面的代码:

改成下面的样子:

<li ui-sref-active="active"><a ui-sref="dashboard.flow({app: entry.app})"><i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则</a>
</li>

默认用的是dashboard.flowV1,这个代码可以在app.js中找到:

改完之后你就可以重新将Dashboard打包啦,这样在Dashboard中修改规则的时候就会直接修改Apollo中的配置,Apollo再推送给客户端。

欢迎加入我的知识星球,一起交流技术,免费学习猿天地的课程(http://cxytiandi.com/course)

PS:目前星球中正在星主的带领下组队学习Sentinel,等你哦!

转载于:https://www.cnblogs.com/yinjihuan/p/10708862.html

阿里Sentinel控制台源码修改-对接Apollo规则持久化相关推荐

  1. Mycat源码修改分表规则的CRUD操作测试与改进

    因为目前Mycat 1.6尚不支持既分库又分表的模式,所以需要对源码进行改造,目前实现单库分表的多种分表策略,包括:默认分表.按日期分表.取摸分表,三种规则.经过这几天对源码的改造,这里做一组分表规则 ...

  2. 源码 状态机_阿里中间件seata源码剖析七:saga模式实现

    saga模式是分布式事务中使用比较多的一种模式,他主要应用在长流程的服务,对一个全局事务,如果某个节点抛出了异常,则从这个节点往前依次回滚或补偿事务.今天我们就来看看它的源码实现. 状态机初始化 在之 ...

  3. android打开volte代码,Android8.1 源码修改之插入SIM卡默认启用Volte功能

    前言 公用电话产品,插入SIM卡后要求自动打开Volte功能,即插即用,用完拔卡就走 实现 第一步 开关对应的代码 通过打印日志和全局查找,源码位置 vendor/mediatek/proprieta ...

  4. 还不错的云盘网盘PHP系统源码+支持对接云存储

    正文: 还不错的云盘网盘PHP系统源码+支持对接云存储,快速对接第三方云存储,支持七牛.又拍.阿里OSS.AWS S3.Onedrive.自建远程服务器,当然,还有本地存储. 自定义主题配色,图片.音 ...

  5. 云盘网盘系统源码快速对接多家云存储(带视频搭建教程)

    介绍: PHP云盘网盘系统源码快速对接多家云存储 带视频搭建教程 快速对接多家云存储,支持七牛.又拍云.阿里云OSS.AWS S3.Onedrive.自建远程服务器,当然,还有本地存储. 自定义主题配 ...

  6. 最新云盘网盘PHP源码系统源码+对接云存储/附安装教程

    最新云盘网盘PHP源码系统源码+对接云存储/附安装教程 2022最新云盘网盘PHP系统源码,支持快速对接第三方云存储,支持七牛.又拍.阿里OSS.AWS S3.Onedrive.自建远程服务器,当然, ...

  7. Deep Compression阅读理解及Caffe源码修改

    Deep Compression阅读理解及Caffe源码修改 作者:may0324 更新:  没想到这篇文章写出后有这么多人关注和索要源码,有点受宠若惊.说来惭愧,这个工作当时做的很粗糙,源码修改的比 ...

  8. Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮...

    Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮 前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP) ...

  9. java经典源码 阅读_公开!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例...

    我们为啥要阅读源码? 为什么面试要问源码?为什么我们Java程序员要去看源码?相信大多数程序员看到源码第一感觉都是:枯燥无味,费力不讨好!要不是为了"涨薪"我才不去看这个鬼东西!但 ...

最新文章

  1. OpenCV+python:顶帽、黑帽、形态学梯度
  2. 【C++】C++11的enum class enum struct和enum
  3. 刚刚,旷视开源深度学习框架「天元」:Brain++内核,研发和落地都在用;孙剑:COCO三连冠背后的秘密武器...
  4. 我圣贤为何发起第三方插件商店和桌面应用商店?
  5. WEB攻击手段及防御第3篇-CSRF
  6. 删除计算机360云盘,win7系统怎么取消电脑右键保存到360云盘选项
  7. NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
  8. 双系统(win10 1803+deepin 15.7)安装问题
  9. ActiveMQ 即时通讯服务 入門指南及淺析
  10. 如何高效运作机器学习团队(机器学习入门第四篇)
  11. Android 友盟分享自定义面板使用
  12. 台湾19大IT业营收连衰 全球产业景气警报先兆
  13. 【PS】PS改变字体大小的方法
  14. cass简码大全_cass 简码识别
  15. 2021年数据库课设该怎么做?一个超市管理系统,简单的前后端分离项目,带你从概要设计走到项目发布!(Vue.js+SpringBoot+MybatisPlus)
  16. 在Windows Media Player中使用歌词插件显示歌曲歌词
  17. java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法
  18. 学会计软件测试,会计专业毕业生1个月转行软件测试,她是怎么做到的?
  19. ELISPOT酶联免疫斑点技术说明书
  20. java 微博客户端,Java新浪微博客户端开发第二步

热门文章

  1. 58端口使用技巧跟推送_Kindle使用技巧:定时推送
  2. *PAT_B_1024_Java(20分)
  3. opencv java库_【OpenCV】java资源
  4. yml文件配置mysql表大小写_springboot常用配置(yml文件)
  5. linux应用之----多线程
  6. java NIO和Reactor模式
  7. 深度学习中交叉熵_深度计算机视觉,用于检测高熵合金中的钽和铌碎片
  8. 互联网产品初期需求确定与数据库模型设计——基于Visio和Xmind
  9. PJ Naughter's Freeware Library
  10. base cap 分布式_高并发架构系列:详解分布式一致性ACID、CAP、BASE,以及区别