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

未完待续......

相关推荐
facaixxx20249 分钟前
DeepSeek-R1大模型一键部署安装教程by腾讯云HAI,0基础免安装
人工智能·云计算·腾讯云
Snasph30 分钟前
AI技术路线(marked)
人工智能
oneway_up30 分钟前
神经网络参数量和运算量的计算- 基于deepspeed库和thop库函数
人工智能·深度学习·神经网络
远洋录2 小时前
构建一个研发助手Agent:提升开发效率的实践
人工智能·ai·ai agent
流形填表2 小时前
用FormLinker实现自动调整数据格式,批量导入微软表单
python·microsoft·flask
goomind2 小时前
opencv实现边缘模板匹配
c++·人工智能·opencv·计算机视觉·模板匹配
稚辉君.MCA_P8_Java2 小时前
SpringAI 人工智能
大数据·linux·人工智能·分布式·spring
pps-key2 小时前
汽车自动驾驶AI
人工智能·自动驾驶·汽车
一水鉴天3 小时前
为AI聊天工具添加一个知识系统 之73 详细设计之14 正则表达式 之1
网络·人工智能
weixin_307779133 小时前
自然语言生成(NLG)算法模型评估方案的硬件配置、系统架构设计、软件技术栈、实现流程和关键代码
人工智能·算法·自然语言处理·系统架构