模块的依赖关系是通过特性DependsOnAttribute
指定的,通过DependsOnAttribute在对模块的类进行标注,就可以解析到各个模块的依赖关系,从而实现通过模块的依赖关系进行排序;
提示熟悉APB框架的小伙伴应该可以看出来,Silky模块的设计主要是借鉴了APB框架的模块设计,在一些细节方面做了调整 。Silky的核心模块通过上面的介绍, 我们知道一个模块类的最重要的工作主要由两点: 1. 实现服务的注册; 2. 在应用启动时或是停止时执行指定的方法完成初始化任务或是释放资源的任务;
如何判断是否是silky的核心模块呢? 核心模块最重要的一个作用就是在应用启动时,通过
Initialize()
方法执行该模块的初始化资源的任务;通过查看源码,我们发现大部分silky模块在应用启动时并没有重写
Initialize()
方法,也就是说,大部分silky模块在应用启动过程时主要是完成各个模块的服务类的注册并不需要做什么工作 。
文章插图
如上图所示,我们看到silky框架定义的模块,由如上几个模块是在应用启动是完成了主机启动时的关键性作业;
我们再根据模块的依赖关系,可以看到主机在应用启动时,通过模块初始化任务的一个执行顺序如下所示:
RpcModule --> DotNettyTcpModule | TransactionModule | WebSocketModule | [RpcMonitorModule] --> GeneralHostModule(启动模块[StartUpModule])[DefaultGeneralHostModule|WebSocketHostModule|DefaultWebSocketHostModule]
通过上述的依赖关系,我们可以知道:- Rpc模块在应用启动时是最早被执行;
- 然后依次执行: DotNettyTcpModule | TransactionModule | WebSocketModule | [RpcMonitorModule] 等模块;
- 最后执行应用启动模块指定的初始化方法;
- 实现Rpc消息监听的订阅;
- 解析应用服务与服务条目;
- 启动Rpc消息监听;
- 解析服务主机和注册该主机实例对应的端点;
- 向服务注册中心更新或是获取服务元数据(应用服务描述信息和服务条目描述信息);
- 向服务注册中心注册该服务当前实例的端点以及从服务注册中心获取该服务对应的所有实例;
- 通过心跳的方式从服务注册中心获取最新的服务元数据以及服务实例信息;
推荐阅读
- 一篇文章带你了解轻量级Web服务器——Nginx简单入门
- iphone12有无线充电吗_iphone12可以使用无线充电吗
- 如何转账到支付宝(支付宝不绑卡怎么把钱转到微信)
- Seata 环境搭建
- 四十七 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
- 记录一次sshd服务启动失败
- 微信小程序仿手机相册组件——简单版
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 【Serverless】云函数微信小程序
- ipad如何分屏工作(ipad微信分屏怎么取消)