MQTT---HiveMQ源码详解(三)配置加载

功能

读取config.xml,转成对应的javabean

实现

1、找到文件
2、读取文件
3、替换变量
4、使用JAXB读取xml内容

类图

由于此处设计代码较多,而且处理方式非常通用、也较简单,所以不列举大篇代码,画出uml图讲清关系即可,由于HiveMQ都是采用interface impl的形式太多uml就看不清楚了,为了简单起见,部分接口实现就暂时不出现在类图赏。


config-urml

初看这样的uml图保证所有人都是一脸懵逼,没关系,且听我一一道来。

1、由上一篇我们可以知道config读取是在main方法中就通过HiveMQConfigurationServiceFactory的静态方法create创建。

2、请记住config.xml里面的配置,其实config.xml的根就是HiveMQConfigurationService,他持有了
GeneralConfigurationService
ListenerConfigurationService
MqttConfigurationService
InternalConfigurationService
ThrottlingConfigurationService
PersistenceConfigurationService
SharedSubscriptionsConfigurationService
RestConfigurationService
ClusterConfigurationService
这些接口定义在hivemq spi上都可以看到其源码,有兴趣的朋友可以自行查看。

3、ConfigFile说白了就是config.xml的File的一个holder。

4、HiveMQConfigurationServiceFactory通过,ConfigurationReader来进行对config.xml进行读取,并给上述的那么多service进行初始化赋值。

5、ConfigurationReader通过EnvironmentVariableReplacer把环境变量替换到config.xml中的占位符中,具体的占位符语法情参照hivemq官网的文档。

6、那么通过上述流程就读取出了对应的配置,同时通过spi的形式将上述一堆service提供给Plugin使用。


MQTT交流群:221405150

RocketMQ交流群:10648794

NewSQL交流群:153575008


推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 76,048评论 12 117
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 128,895评论 19 550
  • 一. Java基础部分.................................................
    wy_sure阅读 1,642评论 0 7
  • 减肥刚有一些成效,有开始大吃大喝了,特别是晚上,难道我是要又回到140的重量吗,少吃点,素食为主
    5d7497f2f1ca阅读 19评论 0 0
  • 整场下来总是令人思考,比如第一次上完床就要开始思考:在一起了吗?是什么意思?还会再继续见面上床吗?一直到对方杳无音...
    鹹魚bo阅读 50评论 0 0