hippo4j
最近在看这块源码,暂时简单总结如下:
动态线程池,配置动态更改动态生效的三种方式:
①监听 Nacos、Appolo、ZK配置,配置更改后触发 XXXRefresherHandler系列回调,里头执行 dynamicRefresh系列刷新方法,这块和 spring启动时 refresh()有点相似
②发布-订阅机制,核心数据结构:map(NotifyCenter#Instance.eventPublisher),可根据标识寻找到线程池对应 publisher,对应的便是将页面上线程池配置更改转变成一个事件,由发布者进行发布,而感兴趣的订阅者进行消费,而这块也由一个队列 queue去承接了事件,publisher本身继承 td,内部启动任务轮询 queue,取到配置更改事件去唤醒订阅者,执行 onEvent()方法,对集群部署下的所有机器发信号,实现配置更改的同步(这我猜的)
③bean生命周期以及自动化配置,自动化配置 ConfigService中注册了 ClientWorker客户端工作线程,里头有个定时任务调度器,工作线程会去等待 spring容器启动完后检查动态线程池配置是否被更新;定时会去容器对动态线程池添加了些处理器,里头主要是针对远端线程池的配置进行拉取(可能本地宕机过重启,此时代码中默认配置有可能不是最新的)