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

(接上篇)

EdgeCore e ventbus

前面对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的不同方式。

未完待续......

相关推荐
Learn Beyond Limits2 分钟前
The learning process of Decision Tree Model|决策树模型学习过程
人工智能·深度学习·神经网络·学习·决策树·机器学习·ai
AI360labs_atyun4 分钟前
2025世界智博会,揭幕AI触手可及的科幻生活
人工智能·ai·音视频·生活
luoganttcc8 分钟前
小鹏汽车 vla 算法最新进展和模型结构细节
人工智能·算法·汽车
算家计算11 分钟前
面壁智能开源多模态大模型——MiniCPM-V 4.5本地部署教程:8B参数开启多模态“高刷”时代!
人工智能·开源
居然JuRan11 分钟前
从零开始学大模型之大语言模型
人工智能
扑克中的黑桃A13 分钟前
AI 对话高效输入指令攻略(一):了解AI对话指令
人工智能
算家计算25 分钟前
不止高刷!苹果发布会AI功能全面解析:实时翻译、健康监测重磅升级
人工智能·apple·资讯
m0_6770343538 分钟前
机器学习-异常检测
人工智能·深度学习·机器学习
张子夜 iiii1 小时前
实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
人工智能·pytorch·python·opencv·计算机视觉
胡耀超1 小时前
3.Python高级数据结构与文本处理
服务器·数据结构·人工智能·windows·python·大模型