自从笔者给dynamic-tp
接入了Zookeeper
配置中心,就想着再扩展其他的配置中心,恰好笔者近期也在调研Consul
配置中心,所以就想着将Consul
配置中心接入到dynamic-tp
。
Consul
配置中心是通过定时任务做的配置变更,为了屏蔽底层实现,这里我选择对SpringBoot
程序和SpringCloud
应用进行接入,使用的包是spring-cloud-starter-consul-config
,对于SpringBoot
程序来说,集成起来相当容易,因为spring-cloud-starter-consul-config
刷新配置的原理是刷新Spring
容器中的配置,并且Spring
提供了原生的监听接口SmartApplicationListener
,实现该接口并监听RefreshScopeRefreshedEvent
事件,刷新完毕后Spring
发布该事件,我们就可以通过新的配置刷新线程池配置了。
配置刷新完毕后DtpProperties
已经是最新的配置了,直接去刷新dynamic-tp
的配置即可。
@Slf4j
public class CloudConsulRefresher extends AbstractRefresher implements SmartApplicationListener {
@Resource
private DtpProperties dtpProperties;
@Override
public boolean supportsEventType(@NonNull Class<? extends ApplicationEvent> eventType) {
return RefreshScopeRefreshedEvent.class.isAssignableFrom(eventType);
}
@Override
public void onApplicationEvent(@NonNull ApplicationEvent event) {
if (event instanceof RefreshScopeRefreshedEvent) {
doRefresh(dtpProperties);
}
}
}
不得不说SpringCloud
提供的配置中心客户端简直太简单了,同样的SpringCloud
也为Zookeeper
,Nacos
提供了相应的config-starter
,之前笔者提供了基于CuratorFramework
的实现,为的是非SpringBoot
的程序接入,针对SpringCloud
笔者也对spring-cloud-starter-zookeeper-config
进行了实现,实现与Consul
完全一样。