(接上篇)
EdgeCore之eventbus
前面對EdgeCore組件的edged、devicetwin、edgehub功能模塊進(jìn)行了分析,本節(jié)對EdgeCore組件的另一個功能模塊eventbus進(jìn)行剖析。eventbus作為KubeEdge的edge部分與MQTT進(jìn)行交互的門戶,因此我們有必要將eventbus相關(guān)內(nèi)容徹底分析清楚,為使用過程中的故障排查和未來的功能擴(kuò)展與性能優(yōu)化都會有很大的幫助。eventbus的具體業(yè)務(wù)邏輯主要集中在啟動過程中,本節(jié)就側(cè)重分析eventbus啟動流程,包括eventbus的struct調(diào)用鏈剖析、eventbus的具體邏輯剖析。
eventbus的struct調(diào)用鏈剖析
eventbus的模塊注冊函數(shù)具體如下所示。
KubeEdge/edge/pkg/eventbus/event_bus.go |
// Register register eventbus func?Register() { mode, err := config.CONFIG.GetValue("mqtt.mode").ToInt() if err != nil || mode > externalMqttMode?|| mode < internalMqttMode?{ mode = internalMqttMode } edgeEventHubModule?:= eventbus{mqttMode: mode} core.Register(&edgeEventHubModule) } |
注冊函數(shù)中做了兩件事。
1)從配置文件中獲取mqtt.mode,并對其進(jìn)行判斷,具體如下所示。
mode, err := config.CONFIG.GetValue("mqtt.mode").ToInt() if err != nil || mode > externalMqttMode?|| mode < internalMqttMode?{ mode = internalMqttMode } |
mqtt.mode的具體定義如下所示。
KubeEdge/edge/pkg/eventbus/event_bus.go |
const ( internalMqttMode?= IoTa // 0: launch an internal mqtt?broker. bothMqttMode????????????// 1: launch an internal and external mqtt?broker. externalMqttMode????????// 2: launch an external mqtt?broker. ... ) |
mqtt.mode定義分internalMqttMode、bothMqttMode和externalMqttMode三種。其中,externalMqttMode?啟動內(nèi)部mqtt代理;bothMqttMode?同時啟動內(nèi)部和外部mqtt代理;externalMqttMode?啟動外部mqtt代理。
2)實(shí)例化eventbus并將其注冊,具體如下所示。
edgeEventHubModule?:= eventbus{mqttMode: mode} core.Register(&edgeEventHubModule) |
Eventbus?struct定義如下所示。
KubeEdge/edge/pkg/eventbus/event_bus.go |
// eventbus?struct type eventbus?struct { context ?*context.Context mqttMode?int } |
eventbus包括context、mqttMode兩個屬性。context負(fù)責(zé)與EdgeCore其他模塊的通信;mqttMode用來區(qū)分eventbus連接mqtt的不同方式。文章來源:http://www.zghlxwxcb.cn/news/detail-837348.html
「未完待續(xù)……」?文章來源地址http://www.zghlxwxcb.cn/news/detail-837348.html
到了這里,關(guān)于「連載」邊緣計算(二十七)03-07:邊緣部分源碼(源碼分析篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!