(接上篇)

EdgeCoreeventbus

前面对EdgeCore组件的edged、devicetwinedgehub功能模块进行了分析,本节对EdgeCore组件的另一个功能模块eventbus进行剖析。eventbus作为KubeEdge的edge部分与MQTT进行交互的门户,因此我们有必要将eventbus相关内容彻底分析清楚,为使用过程中的故障排查和未来的功能扩展与性能优化都会有很大的帮助。eventbus的具体业务逻辑主要集中在启动过程中,本节就侧重分析eventbus启动流程,包括eventbus的struct调用剖析、eventbus的具体逻辑剖析。

eventbus的struct调用剖析

eventbus的模块注册函数具体如下所示。

KubeEdge/edge/pkg/eventbus/event_bus.go

// Register register eventbus

funcRegister() {

mode, err := config.CONFIG.GetValue(“mqtt.mode”).ToInt()

if err != nil || mode > externalMqttMode|| mode < internalMqttMode{

mode = internalMqttMode

}

edgeEventHubModule:= eventbus{mqttMode: mode}

core.Register(&edgeEventHubModule)

}

注册函数中做了两件事。

1)配置文件中获取mqtt.mode,并对其进行判断,具体如下所示。

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 mqttbroker.

bothMqttMode// 1: launch an internal and external mqttbroker.

externalMqttMode// 2: launch an external mqttbroker.

)

mqtt.mode定义分internalMqttModebothMqttModeexternalMqttMode三种。其中,externalMqttMode启动内部mqtt代理;bothMqttMode同时启动内部和外部mqtt代理;externalMqttMode启动外部mqtt代理。

2)实例化eventbus并将其注册,具体如下所示。

edgeEventHubModule:= eventbus{mqttMode: mode}

core.Register(&edgeEventHubModule)

Eventbusstruct定义如下所示。

KubeEdge/edge/pkg/eventbus/event_bus.go

// eventbusstruct

type eventbusstruct {

context *context.Context

mqttModeint

}

eventbus包括context、mqttMode两个属性。context负责与EdgeCore其他模块的通信;mqttMode用来区分eventbus连接mqtt的不同方式。

未完待续……