(接上篇)
EdgeCore之eventbus
前面对EdgeCore组件的edged、devicetwin、edgehub功能模块进行了分析,本节对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 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) } |
注册函数中做了两件事。
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 mqtt broker. bothMqttMode // 1: launch an internal and external mqtt broker. externalMqttMode // 2: launch an external mqtt broker. ... ) |
mqtt.mode定义分internalMqttMode、bothMqttMode和externalMqttMode三种。其中,externalMqttMode 启动内部mqtt代理;bothMqttMode 同时启动内部和外部mqtt代理;externalMqttMode 启动外部mqtt代理。
2)实例化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负责与EdgeCore其他模块的通信;mqttMode用来区分eventbus连接mqtt的不同方式。文章来源:https://www.toymoban.com/news/detail-837348.html
「未完待续……」 文章来源地址https://www.toymoban.com/news/detail-837348.html
到了这里,关于「连载」边缘计算(二十七)03-07:边缘部分源码(源码分析篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!