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

未完待续......

相关推荐
物联网软硬件开发-轨物科技3 分钟前
【技术白皮书】并网柜在线监测物联网解决方案 · 技术白皮书
人工智能·科技·其他·机器人
合合技术团队5 分钟前
合合信息旗下启信慧眼推出新型数据服务模式,入选WorkBuddy十大专业级技能
人工智能·供应链·workbuddy
2601_950760797 分钟前
TNF-α:自身免疫疾病治疗的核心靶点与信号通路解析
人工智能·算法·蛋白
微学AI11 分钟前
把 GitHub Issue 的“第一轮脏活”交给 AI:Issue AI Agent 接入蓝耘元生代实战
人工智能·github·issue
70asunflower11 分钟前
Qwen3.8-27B 在 Jetson Thor 上的 llama.cpp 部署手册(Q8_0 + MTP)
人工智能·推理部署·qwen3.8
SaaS发言人13 分钟前
渠道数字化解决方案横评:谁更懂快消
java·大数据·人工智能
新知图书13 分钟前
7.3 面向Agent的提示词设计方法论
人工智能·数据分析·agent·ai agent·智能体
极客猴子15 分钟前
多人发言自动区分的录音转文字APP:AI发言人识别实测
人工智能·智能手机·语音识别
数字融合18 分钟前
透明化视频孪生大数据全域时空对齐应用技术
大数据·人工智能·virtualenv
AI导出鸭PC端18 分钟前
Perplexity怎么复制表格?AI 导出鸭的“格式网关”给出了一个硬核答案
人工智能·豆包·ai导出鸭