kubeedge-beehive源碼解析

個(gè)人認(rèn)為beehive是kubeedge的通訊的核心模塊,將beehive看明白基本上就理解一半hubeedge的工作機(jī)制了。首先我將beehive核心代碼目錄拿出來(lái),大家看下:

上面的目錄是我將kubeedge里的重要部分拿出來(lái)的,下面依次說(shuō)下:

1、module.go core.go文件

如上圖所示 module是一個(gè)接口,上一篇文章已經(jīng)說(shuō)過(guò)kubeedge包含了幾個(gè)重要的模塊,都已經(jīng)實(shí)現(xiàn)了這個(gè)接口。然后這些模塊初始化時(shí),根據(jù)配置文件的配置狀態(tài)到modules map[string]Module結(jié)構(gòu)中,然后在遍歷modules,依次啟動(dòng)相應(yīng)的服務(wù)。依次啟動(dòng)服務(wù)的代碼如下:


注意:函數(shù)中的參數(shù)sync.WaitGroup是我為了寫demo自己增加的,原函數(shù)是不存在的。

2、message.go文件很簡(jiǎn)單,就是定義message的格式。這里大家應(yīng)該都可以看明白就不再累贅了。

3、context目錄--這個(gè)目錄我認(rèn)為是beehive的核心,首先看下context.go文件,這里面定義了核心beehiveContext對(duì)象的結(jié)構(gòu):

type beehiveContext struct {

????????moduleContext ModuleContext

? ???? messageContext MessageContext

? ???? ctx context.Context

? ???? cancel context.CancelFunc

}

其中ModuleContext與MessageContext均為接口,具體定義如下:

type ModuleContext interface {

????AddModule(module string)

????AddModuleGroup(module, group string)

????Cleanup(module string)

}

type MessageContext interface {

????Send(module string, message model.Message)

????Receive(module string) (model.Message, error)

????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

}

然后我們看conetxt_factory.go文件,從名字可以得知,他是采用工廠模式創(chuàng)建了一個(gè)context對(duì)象,具體實(shí)現(xiàn)為InitContext函數(shù)

這個(gè)函數(shù)中首先創(chuàng)建了beehiveContext對(duì)象,然后根據(jù)傳入的contextType創(chuàng)建了MsgCtxTypeChannel類型的ChannelContext對(duì)象,將beehiveContext的moduleContext、messageContext同時(shí)賦值為ChannelContext對(duì)象,可想而之,ChannelContext對(duì)象同時(shí)實(shí)現(xiàn)了上面的兩個(gè)接口的所有方法。

最后我們看下context_channel.go文件,可以確定ChannelContext確實(shí)實(shí)現(xiàn)了上述接口的所有方法,具體結(jié)構(gòu)如下:

type ChannelContext struct {

//ConfigFactory goarchaius.ConfigurationFactory

? channels map[string]chan model.Message

? chsLock sync.RWMutex

? typeChannels map[string]map[string]chan model.Message

? typeChsLock sync.RWMutex

? anonChannels map[string]chan model.Message

? anonChsLock sync.RWMutex

}

至此beehive的工作流程已經(jīng)完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容