(接上篇)
EdgeCore 组件内部各功能模块的共用框架
EdgeCore中模块的共用框架和功能分析
在《深入理解边缘计算:云、边、端工作原理与源码分析》8.2.2节的EdgeCore代码入口部分,我们已经分析到EdgeCore中功能模块的注册和已注册功能模块的启动,下面接着往下分析。
EdgeCore中功能模块的注册具体如下所示。
| // registerModules register all the modules started in EdgeCorefunc registerModules() {devicetwin.Register()edged.Register()edgehub.Register()eventbus.Register()edgemesh.Register()metamanager.Register()servicebus.Register()test.Register()dbm.InitDBManager()} |
|---|
从registerModules()函数中,可以知道EdgeCore中有devicetwin、edged、edgehub、eventbus、edgemesh、metamanager、servicebus和test共8个功能模块,还有一个db初始化函数。Register()函数定义具体如下所示:
| // Register register devicetwinfunc Register() {dtclient.InitDBTable()dt := DeviceTwin{}core.Register(&dt)} |
|---|
在KubeEdge/edge/pkg/devicetwin/devicetwin.go中的Register(…)函数只是调用了KubeEdge/beehive/pkg/core/module.go中的Register(…)函数。下面继续探究Register()函数。
core.Register(&dt)函数定义具体如下所示。
| ...var (// Modules mapmodules map[string]ModuledisabledModules map[string]Module)...func Register(m Module) {if isModuleEnabled(m.Name()) {modules[m.Name()] = mklog.Infof("Module %v registered", m.Name())} else {disabledModules[m.Name()] = mklog.Warningf("Module %v is not register, please check modules.yaml",m.Name())}} |
|---|
上述代码中,devicetwin模块注册最终会将该模块的结构体放入一个map[string]Module类型的全局变量modules中。
按照cloudhub模块注册的思路分析,edged、edgehub、eventbus、edgemesh、metamanager、servicebus和test也做了相同的事情,最终把各自的结构体放入一个map[string]Module类型的全局变量modules中。
这8个功能模块之所以能够采用相同的注册流程,是因为它们都实现了KubeEdge/beehive/pkg/core/module.go中的Module接口。Module接口定义具体内容如下所示。
| type Module interface {Name() stringGroup() stringStart(c *context.Context)Cleanup()} |
|---|
我们可以分别在KubeEdge/edge/pkg/devicetwin/devicetwin.go、KubeEdge/edge/pkg/edged/edged.go、KubeEdge/edge/pkg/edgehub/module.go、KubeEdge/edge/pkg/eventbus/event_bus.go、KubeEdge/edge/pkg/edgemesh/module.go、KubeEdge/edge/pkg/metamanager/module.go、KubeEdge/edge/pkg/servicebush/servicebus.go、KubeEdge/edge/pkg/test/test.go中找到devicetwin、edged、edgehub、eventbus、edgemesh、metamanager、servicebus和test共8个功能模块对Module接口的具体实现。
EdgeCore中功能模块的启动
EdgeCore中功能模块的启动与中的CloudCore中功能模块的启动流程完全相同,大家可以参考该部分。
「未完待续……」 点击下方标题可阅读技术文章