「连载」边缘计算(三十八)03-21:边缘部分源码分析(源码分析篇)

97 阅读4分钟

(接上篇)

context.GetContext()函数定义具体如下所示。

KubeEdge/beehive/pkg/core/context/contex_factory.go
// GetContext gets global context instancefunc GetContext(contextType string) *Context {once.Do(func() {context = &Context{}switch contextType {case MsgCtxTypeChannel:channelContext := NewChannelContext()context.messageContext = channelContextcontext.moduleContext = channelContextdefault: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 objecttype Context struct {moduleContext  ModuleContextmessageContext MessageContext} //ModuleContext is interface for context module managementtype ModuleContext interface {AddModule(module string)AddModuleGroup(module, group string)Cleanup(module string)}//MessageContext is interface for message syncingtype MessageContext interface {// async modeSend(module string, message model.Message)Receive(module string) (model.Message, error)// sync modeSendSync(module string, message model.Message, timeout time.Duration) ( model.Message, error)SendResp(message model.Message)// group broadcastSendToGroup(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(),进入该函数的定义去看一下它是不是真身。

ChannelContext struct定义如下所示。

KubeEdge/beehive/pkg/core/context/context.go
// ChannelContext is object for Context channeltype ChannelContext struct {//ConfigFactory goarchaius.ConfigurationFactorychannels     map[string]chan model.MessagechsLock      sync.RWMutextypeChannels map[string]map[string]chan model.MessagetypeChsLock  sync.RWMutexanonChannels map[string]chan model.MessageanonChsLock  sync.RWMutex}

  上述代码中,ChannelContext 函数实现了Context struct(KubeEdge/beehive/pkg/core/context/context.go)属性包含的所有interface(ModuleContext,MessageContext)。毫无疑问,ChannelContext struct就是CloudCore中各功能模块相互通信的消息队列框架的真身了。

  至于ChannelContext struct在CloudCore中各功能模块是如何相互通信的,感兴趣的读者可以根据本文的梳理自己去深入剖析。

未完待续……」 点击下方标题可阅读技术文章

「连载」边缘计算(一)01-16:边缘计算系统(基础篇)

juejin.cn/post/732453…

「连载」边缘计算(二)01-16:边缘计算系统(基础篇)

juejin.cn/post/732452…

「连载」边缘计算(三)01-17:边缘计算系统(基础篇)

juejin.cn/post/732488…

「连载」边缘计算(四)01-18:边缘计算系统(基础篇)

juejin.cn/post/732525…

「连载」边缘计算(五)01-19:云、边、端的部署与配置(基础篇)

juejin.cn/post/732542…

「连载」边缘计算(六)01-22:云、边、端的部署与配置(基础篇)

juejin.cn/post/732657…

「连载」边缘计算(七)01-23:云、边、端的部署与配置(基础篇)

juejin.cn/post/732686…

「连载」边缘计算(八)01-24:云、边、端的部署与配置(基础篇)

juejin.cn/post/732719…

「连载」边缘计算(九)01-25:云、边、端的部署与配置(基础篇)

juejin.cn/post/732768…

「连载」边缘计算(十)01-26:云、边、端的部署与配置(基础篇)

juejin.cn/post/732798…

「连载」边缘计算(十一)01-29:云、边、端的部署与配置(基础篇)

juejin.cn/spost/73290…

「连载」边缘计算(十二)01-30:云、边、端的部署与配置(基础篇)

juejin.cn/post/732947…

「连载」边缘计算(十三)01-31:云、边、端的部署与配置(基础篇)

juejin.cn/post/732979…

「连载」边缘计算(十四)02-01:云、边、端的部署与配置(基础篇)

juejin.cn/post/733029…

「连载」边缘计算(十五)02-02:云、边、端的部署与配置(基础篇)

juejin.cn/post/733054…

「连载」边缘计算(十六)02-18:云、边、端的部署与配置(基础篇)

juejin.cn/post/733653…

「连载」边缘计算(十七)02-19:边缘计算系统逻辑架构(原理篇)

juejin.cn/post/733686…

「连载」边缘计算(十八)02-20:边缘计算系统逻辑架构(原理篇)

juejin.cn/post/733723…

「连载」边缘计算(十九)02-21:边缘计算系统逻辑架构(原理篇)

juejin.cn/post/733758…

「连载」边缘计算(二十)02-22:边缘部分原理解析(原理篇)

juejin.cn/post/733797…

「连载」边缘计算(二十一)02-23:边缘部分原理解析(原理篇)

juejin.cn/post/733830…

「连载」边缘计算(二十二)02-26:边缘部分原理解析(原理篇)

juejin.cn/post/733946…

「连载」边缘计算(二十三)02-27:边缘部分原理解析(原理篇)

juejin.cn/post/733980…

「连载」边缘计算(二十四)02-28:边缘部分原理解析(原理篇)

juejin.cn/post/734019…

「连载」边缘计算(二十五)03-04:边缘部分原理解析(原理篇)

juejin.cn/post/734175…

「连载」边缘计算(二十六)03-05:边缘部分原理解析(原理篇)

juejin.cn/post/734240…

「连载」边缘计算(二十七)03-06:边缘部分源码分析(源码分析篇)

juejin.cn/post/734279…

「连载」边缘计算(二十八)03-07:边缘部分源码分析(源码分析篇)

juejin.cn/post/734324…

「连载」边缘计算(二十九)03-08:边缘部分源码分析(源码分析篇)

juejin.cn/post/734353…

「连载」边缘计算(三十)03-11:边缘部分源码分析(源码分析篇)

juejin.cn/post/734457…

「连载」边缘计算(三十一)03-12:边缘部分源码分析(源码分析篇)

juejin.cn/post/734507…

「连载」边缘计算(三十二)03-13:边缘部分源码分析(源码分析篇)

juejin.cn/post/734542…

「连载」边缘计算(三十三)03-14:边缘部分源码分析(源码分析篇)

juejin.cn/post/734582…

「连载」边缘计算(三十四)03-15:边缘部分源码分析(源码分析篇)

juejin.cn/post/734622…

「连载」边缘计算(三十五)03-18:边缘部分源码分析(源码分析篇)

juejin.cn/post/734727…

「连载」边缘计算(三十六)03-19:边缘部分源码分析(源码分析篇)

juejin.cn/post/734791…

「连载」边缘计算(三十七)03-20:边缘部分源码分析(源码分析篇)

juejin.cn/post/734801…