「连载」边缘计算(二十八)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() |

未完待续......

相关推荐
手机不死我是天子几秒前
拆解大模型二:Transformer 最核心的设计,其实你高中就学过
人工智能·llm
gustt1 分钟前
MCP协议进阶:构建多工具Agent实现智能查询与浏览器交互
人工智能·agent·mcp
Halo咯咯6 分钟前
Claude Code 的工程哲学:缓存与工具设计的真实教训 | 经验分享
人工智能
风象南1 小时前
最适合新手先装的 20 个 OpenClaw Skills 来了!
人工智能
小兵张健12 小时前
35岁程序员的春天来了
人工智能
大怪v12 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
冬奇Lab12 小时前
OpenClaw 深度解析(六):节点、Canvas 与子 Agent
人工智能·开源
刀法如飞14 小时前
AI提示词框架深度对比分析
人工智能·ai编程
IT_陈寒15 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
1G16 小时前
openclaw控制浏览器/自动化的playwright MCP + Mcporter方案实现
人工智能