「连载」边缘计算(二十七)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的不同方式。

未完待续......

相关推荐
Blossom.11842 分钟前
基于时序大模型+强化学习的虚拟电厂储能调度系统:从负荷预测到收益最大化的实战闭环
运维·人工智能·python·决策树·机器学习·自动化·音视频
百胜软件@百胜软件2 小时前
重塑零售未来:百胜智能中台+胜券AI,赋能品牌零售撬动3100亿增量市场
大数据·人工智能·零售
Shawn_Shawn7 小时前
人工智能入门概念介绍
人工智能
极限实验室7 小时前
程序员爆哭!我们让 COCO AI 接管 GitLab 审查后,团队直接起飞:连 CTO 都说“这玩意儿比人靠谱多了
人工智能·gitlab
Maynor9968 小时前
Z-Image: 100% Free AI Image Generator
人工智能
爬点儿啥9 小时前
[Ai Agent] 10 MCP基础:快速编写你自己的MCP服务器(Server)
人工智能·ai·langchain·agent·transport·mcp
张人玉9 小时前
百度 AI 图像识别 WinForms 应用代码分析笔记
人工智能·笔记·百度
测试人社区-小明9 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
Spring AI学习10 小时前
Spring AI深度解析(9/50):可观测性与监控体系实战
java·人工智能·spring
罗西的思考10 小时前
【Agent】MemOS 源码笔记---(5)---记忆分类
人工智能·深度学习·算法