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

(接上篇)

eventbus 的具体逻辑剖析

从eventbus的启动函数切入分析具体逻辑,具体如下所示。

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/eventbus/event_bus.go |
| func (eb *eventbus) Start(c *context.Context) { // no need to call TopicInit now, we have fixed topic eb.context = c nodeID := config.CONFIG.GetConfigurationByKey("edgehub.controller.node-id") ... mqttBus.NodeID = nodeID.(string) mqttBus.ModuleContext = c if eb.mqttMode >= bothMqttMode { // launch an external mqtt server externalMqttURL := config.CONFIG.GetConfigurationByKey("mqtt.server") ... hub := &mqttBus.Client{ MQTTUrl: externalMqttURL.(string), } mqttBus.MQTTHub = hub hub.InitSubClient() hub.InitPubClient() } if eb.mqttMode <= bothMqttMode { internalMqttURL := config.CONFIG.GetConfigurationByKey("mqtt.internal-server") ... qos := config.CONFIG.GetConfigurationByKey("mqtt.qos") ... retain := config.CONFIG.GetConfigurationByKey("mqtt.retain") ... sessionQueueSize := config.CONFIG.GetConfigurationByKey("mqtt.session-queue-size") ... if qos.(int) < int(packet.QOSAtMostOnce) || qos.(int) > int(packet.QOSExactlyOnce) || sessionQueueSize.(int) <= 0 { klog.Errorf("mqtt.qos must be one of 0,1,2 or mqtt.session-queue-size must > 0") os.Exit(1) } // launch an internal mqtt server only mqttServer = mqttBus.NewMqttServer(sessionQueueSize.(int), internalMqttURL.(string), retain.(bool), qos.(int)) mqttServer.InitInternalTopics() err := mqttServer.Run() ... } eb.pubCloudMsgToEdge() } |

eventbus的启动函数做了如下3件事。

1) 处理eventbus模块的公共配置,具体如下所示。

|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| eb.context = c nodeID := config.CONFIG.GetConfigurationByKey("edgehub.controller.node-id") ... mqttBus.NodeID = nodeID.(string) mqttBus.ModuleContext = c |

接收并存储与EdgeCore其他模块通信的管道,从配置文件中获取所在节点的唯一标识。

2) 根据不同mqttMode启动与mqtt交互的不同实例,具体如下所示。

|---------------------------------------------------------------------------------|
| if eb.mqttMode >= bothMqttMode { ... } if eb.mqttMode <= bothMqttMode { ... } |

当 eb.mqttMode >= bothMqttMode将mqtt代理启动在eventbus之外,eventbus作为独立启动的mqtt代理的客户端与其交互;当eb.mqttMode <= bothMqttMode时,在eventbus内启动一个mqtt代理,负责与终端设备交互。

3)将云部分的指令和事件下发到与eventbus相连的设备,具体如下所示。

|------------------------|
| eb.pubCloudMsgToEdge() |

未完待续......

相关推荐
大模型探索者1 小时前
2026 企业智能体平台选型指南:从通用到行业深耕,怎么选?
大数据·人工智能
深圳行云创新1 小时前
北极星知识图谱平台|太空越来越“拥挤”,知识图谱如何预测空间碎片碰撞风险?
人工智能·知识图谱
Am-Chestnuts2 小时前
国产AI多轮对话归档与多格式导出实践
人工智能·word
workflower3 小时前
装备企业的 AI 路线图
人工智能·深度学习·机器学习·设计模式·机器人
AKAMAI3 小时前
Linode接口及默认防火墙现已全面开放使用
人工智能·云计算
前端开发江鸟3 小时前
RAG 回答错了,问题到底出在召回、重排,还是生成?
人工智能
美狐美颜SDK开放平台4 小时前
直播app开发如何实现主播级美颜效果?美颜sdk开发方案详解
人工智能·音视频·美颜sdk·视频美颜sdk·美颜api
东方小月4 小时前
从零开发一个 Coding Agent(四):使用状态机校验大模型事件流
前端·人工智能·后端
大龄码农有梦想4 小时前
使用大模型服务如何保证数据安全?企业 AI 安全、私有化部署与治理实践
人工智能·私有化部署·数据安全·信创·ai agent·智能体·智能体开发平台
冬奇Lab4 小时前
每日一个开源项目(第170篇):CodeWiki - ACL 2026 论文级代码库自动文档生成,递归多 Agent 架构
人工智能·开源·资讯