买东西网站,太原网站建设 网站制作,wordpress自定义文章模板插件,网站系统设计论文#xff08;接上篇#xff09;
CloudCore
本节将对CloudCore进行剖析#xff0c;对CloudCore组件中功能模块共用的消息框架和各功能模块的具体功能进行深入剖析#xff0c;具体包括CloudCore功能模块之间通信的消息框架、cloudhub剖析、edgecontroller剖析、devicecontro…接上篇
CloudCore
本节将对CloudCore进行剖析对CloudCore组件中功能模块共用的消息框架和各功能模块的具体功能进行深入剖析具体包括CloudCore功能模块之间通信的消息框架、cloudhub剖析、edgecontroller剖析、devicecontroller剖析。
CloudCore功能模块之间通信的消息框架
CloudCore组件中各个功能模块之间是通过Beehive来组织和管理的。Beehive的消息框架是在CloudCore的功能模块启动的时候启动的具体如下所示。 KubeEdge/beehive/pkg/core/core.go import ( ... GitHub.com/KubeEdge/beehive/pkg/core/context ) // StartModules starts modules that are registered func StartModules() { coreContext : context.GetContext(context.MsgCtxTypeChannel) modules : GetModules() for name, module : range modules { //Init the module coreContext.AddModule(name) //Assemble typeChannels for sendToGroup coreContext.AddModuleGroup(name, module.Group()) go module.Start(coreContext) klog.Infof(Starting module %v, name) } }
上述代码中在CloudCore的功能模块启动之前首先实例化了一个beehive的context然后再获得各个功能模块最后用一个for循环逐个启动功能模块并将已实例化的beehive的context作为参数传入每个功能模块的启动函数中。这样CloudCore中独立的功能模块就被beehive的context组织成了一个统一的整体。至于beehive的context是怎么做到的还需要进入beehive的context的实例化函数context.GetContext()一探究竟。
context.GetContext()函数定义具体如下所示。 KubeEdge/beehive/pkg/core/context/contex_factory.go // GetContext gets global context instance func GetContext(contextType string) *Context { once.Do(func() { context Context{} switch contextType { case MsgCtxTypeChannel: channelContext : NewChannelContext() context.messageContext channelContext context.moduleContext channelContext default: klog.Warningf(Do not support context type:%s, contextType) } }) return context }
context.GetContext()函数定义中的第3行context Context{}实例化了一个空context。下面我们分析该实例化context。context 结构体具体如下所示。 KubeEdge/beehive/pkg/core/context/context.go // Context is global context object type Context struct { moduleContext ModuleContext messageContext MessageContext } //ModuleContext is interface for context module management type ModuleContext interface { AddModule(module string) AddModuleGroup(module, group string) Cleanup(module string) } //MessageContext is interface for message syncing type MessageContext interface { // async mode Send(module string, message model.Message) Receive(module string) (model.Message, error) // sync mode SendSync(module string, message model.Message, timeout time.Duration) ( model.Message, error) SendResp(message model.Message) // group broadcast SendToGroup(moduleType string, message model.Message) SendToGroupSync(moduleType string, message model.Message, timeout time.Duration) error }
从上面的Context结构体可以看出该Context的两个属性——moduleContext和messageContext它们都是interface类型所以可以断定该Context不是真身。在函数GetContext()KubeEdge/beehive/pkg/core/context/context.go继续往下看在第6行channelContext : NewChannelContext()有一个context实例化函数NewChannelContext()进入该函数的定义去看一下它是不是真身。 「未完待续……」
点击下方标题可阅读技术文章
「连载」边缘计算一01-16边缘计算系统逻辑架构原理篇「连载」边缘计算二01-17边缘计算系统逻辑架构原理篇「连载」边缘计算三01-18边缘部分原理解析原理篇「连载」边缘计算四01-19边缘部分原理解析原理篇「连载」边缘计算五01-22边缘部分原理解析原理篇「连载」边缘计算六01-23边缘部分原理解析原理篇「连载」边缘计算七01-24边缘部分原理解析原理篇「连载」边缘计算八01-25边缘部分源码源码分析篇「连载」边缘计算九01-26边缘部分源码源码分析篇
「连载」边缘计算十01-29边缘部分源码源码分析篇「连载」边缘计算十一01-30边缘部分源码源码分析篇「连载」边缘计算十二01-31边缘部分源码源码分析篇「连载」边缘计算十三02-01边缘部分源码源码分析篇