Silky微服务框架之模块( 三 )


模块的依赖关系是通过特性DependsOnAttribute指定的,通过DependsOnAttribute在对模块的类进行标注,就可以解析到各个模块的依赖关系,从而实现通过模块的依赖关系进行排序;

提示熟悉APB框架的小伙伴应该可以看出来,Silky模块的设计主要是借鉴了APB框架的模块设计,在一些细节方面做了调整 。
Silky的核心模块通过上面的介绍, 我们知道一个模块类的最重要的工作主要由两点: 1. 实现服务的注册; 2. 在应用启动时或是停止时执行指定的方法完成初始化任务或是释放资源的任务;
如何判断是否是silky的核心模块呢? 核心模块最重要的一个作用就是在应用启动时,通过Initialize()方法执行该模块的初始化资源的任务;
通过查看源码,我们发现大部分silky模块在应用启动时并没有重写Initialize()方法,也就是说,大部分silky模块在应用启动过程时主要是完成各个模块的服务类的注册并不需要做什么工作 。
Silky微服务框架之模块

文章插图
如上图所示,我们看到silky框架定义的模块,由如上几个模块是在应用启动是完成了主机启动时的关键性作业;
我们再根据模块的依赖关系,可以看到主机在应用启动时,通过模块初始化任务的一个执行顺序如下所示:
RpcModule --> DotNettyTcpModule | TransactionModule | WebSocketModule | [RpcMonitorModule] --> GeneralHostModule(启动模块[StartUpModule])[DefaultGeneralHostModule|WebSocketHostModule|DefaultWebSocketHostModule] 通过上述的依赖关系,我们可以知道:
  1. Rpc模块在应用启动时是最早被执行;
  2. 然后依次执行: DotNettyTcpModule | TransactionModule | WebSocketModule | [RpcMonitorModule] 等模块;
  3. 最后执行应用启动模块指定的初始化方法;
在上述的过程中,Silky主机在启动时需要完成如下的工作:
  1. 实现Rpc消息监听的订阅;
  2. 解析应用服务与服务条目;
  3. 启动Rpc消息监听;
  4. 解析服务主机和注册该主机实例对应的端点;
  5. 向服务注册中心更新或是获取服务元数据(应用服务描述信息和服务条目描述信息);
  6. 向服务注册中心注册该服务当前实例的端点以及从服务注册中心获取该服务对应的所有实例;
  7. 通过心跳的方式从服务注册中心获取最新的服务元数据以及服务实例信息;
在下面的篇章中,我们将着重介绍上述的过程是如何实现的 。

推荐阅读