文章目录
Sentinel由于之前接的云上版本的控制台,在集群限流及功能上有限制,现打算新接入开源版本Sentinel,做一些定制化的修改
针对开源版本Sentinel,整体来说要做的就是两步
- 第一步要做的就是搭建Sentinel Dashboard
- 第二步要做的就是客户端接入Sentinel
官方版本Sentinel Dashboard,有一个明显缺点,所有的限流规则配置都存储在内存中,重启会丢失,正好公司采用了Apollo做配置中心,本文介绍Dashboard中如何修改才能将限流规则推送到Apollo的配置中心,以及客户端如何从Apollo拉取对应限流规则,也会附上我修改后的Dashboard源码,大牛直接看代码就行
先贴上项目地址,觉得可以的,给个star
要针对Dashboard做修改,关键在于两点
- Dashboard中规则查询接口,要改为从配置中心拉取(规则拉取)
- Dashboard中规则保存接口,要改为推送配置到配置中心(规则推送)
在具体上代码之前,先介绍下Sentinel官方针对配置中心规则推送及拉取,封装的两个接口DynamicRuleProvider
及DynamicRulePublisher
DynamicRuleProvider是规则拉取接口,实现getRules方法从指定配置中心拉取规则
public interface DynamicRuleProvider<T> {
T getRules(String appName) throws Exception;
}
DynamicRulePublisher是规则推送接口,实现publish方法将规则推送到指定配置中心
public interface DynamicRulePublisher<T> {
/**
* Publish rules to remote rule configuration center for given application name.
*
* @param app app name
* @param rules list of rules to push
* @throws Exception if some error occurs
*/
void publish(String app, T rules) throws Exception;
}
Apollo规则推送、拉取的实现均基于这两个接口
相关配置
先贴上两个Apollo配置相关的类ApolloConfig
,ApolloConfigUtil
@Configuration
public class ApolloConfig {
@Bean
public ApolloOpenApiClient apolloOpenApiClient() {
ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
.withPortalUrl("")
.withToken("")
.build();
return client;
}
}
其中ApolloConfig保存Apollo OpenAPI相关信息,要实现规则推送到Apollo配置中心,必须调用Apollo的OpenApi,ApolloOpenApiClient初始化时需要两个参数
- portalUrl:Apollo配置中心的访问地址
- token:通过Apollo中开放平台配置相关第三方应用获取,如下图所示</