源码模块概念
ModuleDefine与maven模块关系类名设计application.ymlApplicationConfiguration组件关系Configuration与ModuleDefine关系 启动架构图总结扩展点: Module一maven一application关系图
源码模块由server-starter和server-starter-es7调用server-bootstrapserver-starter和server-starter-es7的区别在于maven中引入的存储模块Module不同
| server-starter | server-starter-es7 |
|---|---|
| storage-elasticsearch-plugin | storage-elasticsearch7-plugin |
ModuleDefine一般对应一个模块ModuleProvider一般对应一个模块的子模块比如配置模块,server-configuration下多个模块对应configuration模块的不同provider实现
| ModuleDefine名称 | application.yml 名称 | maven模块 |
|---|---|---|
| ConfigurationModule | configuration: none: |
| 名称 | 作用 |
|---|---|
| ApplicationConfigLoader | 负责加载application.yml |
| ApplicationConfiguration | 将application.yml转化为ApplicationConfiguration |
| ModuleManager | 管理所有的Module |
| ModuleDefine | 一个ModuleDefine代表一个模块,比如存储模块,UI查询query模块,JVM模块等等;不同的模块相互依赖或者不依赖构建整个oapServer功能 |
| ModuleProvider | ModuleDefine的具体实现,比如StorageModule包含es存储实现,mysql实现等等 |
| Service | 多个service构成一个完整的ModuleProvider,也就是将module的具体实现拆分成多个serviceImpl |
application中的一级对应ModuleDefine,比如storage对应StorageModule
public class StorageModule extends ModuleDefine {
public static final String NAME = “storage”;
}
application中的二级对应ModuleProvider,同时二级只允许在yml配置一个,否则多个Provider想成为Module的loadedProvider实现则启动失败
比如存储模块StorageModule,配置了一个elasticsearch实现,就无需再配置一个mysql实现
三级及以上为配置信息
ApplicationConfiguration
ApplicationConfigurationLoader解析application.yml生成的配置类引导启动程序会根据该配置以及SPI技术查询相关模块和模块提供者实现,并进行加载启动初始化工作一个ApplicationConfiguration包含所有的ModuleConfiguration一个ModuleConfiguration包含多个ProviderConfiguration
组件关系ProviderConfiguration实际只能配置一个作为LoadedProvider
ModuleManager维护所有组件ModuleDefineModuleDefine含有一个加载的loadedModuleProviderloadedModuleProvider持有ModuleDefine和ModuleManager由于不同Module可以存在依赖,所以需要反向持有ModuleManager同时ModuleProvider依赖ModuleDefine的一些功能定义.亦需要反向依赖
Configuration与ModuleDefine关系
加载阶段ModuleConfiguration可以有多个ProviderConfiguration比如存储模块,可以有esProvider mysqlProvider启动时ModuleConfiguration只能有一个ProviderConfiguration,比如存储模块指定为elasticSearch实现一个ModuleConfiguration对应一个ModuleDefine
一个ProviderConfiguration对应一个ModuleProvider
只能有一个ProviderConfiguration也就是说application,yml每个一级只能配置一个二级
两个starter模块依赖es7或者低版本es,启动时根据es版本决定启动who调用server-bootstrap启动解析application.yml生成ApplicationConfigurationModuleManager根据ApplicationConfiguration加载所有的ModuleDefine以及对应的loadedModuleProvider执行prepare,start,notifyAfterCompleted完成所有模块的启动
总结
通过启动架构图可以看出,整个server端依旧是微内核架构,所有的Module和Provider都可通过maven子模块实现不同模块之间尽量减少依赖,必须存在依赖的,内核会进行依赖关系检查Module定义了service接口,Provider必须要实现这些service来构建完整的功能,同时内核也会检查service实现的完整性 扩展点: Module一maven一application关系图



