「连载」边缘计算(三十一)03-13:边缘部分源码(源码分析篇)

(接上篇)

启动一个循环处理各种事件

m.mainLoop()定义具体如下所示。

|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/metamanager/msg_processor.go |
| func (m *metaManager) mainLoop() { go func() { for { if msg, err := m.context.Receive(m.Name()); err == nil { ... m.process(msg) } else { ... } } }() } |

mainLoop()函数启动了一个for循环,在循环中主要做了两件事。

1) 接收信息,具体如下所示。

|-----------------------------------------|
| msg, err := m.context.Receive(m.Name()) |

2)对接收到的信息进行处理,具体如下所示。

|----------------|
| m.process(msg) |

想弄明白对信息的处理过程,需要进入m.process()函数,具体如下所示。

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/metamanager/msg_processor.go |
| func (m *metaManager) process(message model.Message) { operation := message.GetOperation() switch operation { case model.InsertOperation: m.processInsert(message) case model.UpdateOperation: m.processUpdate(message) case model.DeleteOperation: m.processDelete(message) case model.QueryOperation: m.processQuery(message) case model.ResponseOperation: m.processResponse(message) case messagepkg.OperationNodeConnection: m.processNodeConnection(message) case OperationMetaSync: m.processSync(message) case OperationFunctionAction: m.processFunctionAction(message) case OperationFunctionActionResult: m.processFunctionActionResult(message) case constants.CSIOperationTypeCreateVolume, constants.CSIOperationTypeDeleteVolume, constants.CSIOperationTypeControllerPublishVolume, constants.CSIOperationTypeControllerUnpublishVolume: m.processVolume(message) } } |

process()函数中主要做了如下两件事。

1)获取消息的操作的类型,具体如下所示。

|-------------------------------------|
| operation := message.GetOperation() |

2)根据信息操作类型对信息进行相应处理,具体如下所示。

|--------------------------|
| switch operation { ... } |

信息的操作类型包括insert、update、delete、query、response、publish、meta-internal-sync、action、action_result等,本节不对信息的具体处理过程剖析,感兴趣的读者可以在本节的基础上自行剖析。

到此,对EdgeCore中metamanager模块的剖析就结束了。

「 未完待续...... 」

相关推荐
vilya2 分钟前
Agent 语音引擎换心记:从「够用」到「稳且好」
人工智能·agent
王中阳Go3 分钟前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
70后写java的老码农4 分钟前
Ollama 大模型私有化部署与彻底卸载指南(Windows/Linux)
人工智能
清如许.7 分钟前
如何评估 AI 智能体(AI Agent)?指标、方法与最佳实践
人工智能
猪八宅百炼成仙8 分钟前
让 AI 帮你清理电脑而不翻车:一个 Windows 体检调优 Skill 的工程化设计
人工智能·windows
宋艳_AI应用开发10 分钟前
五个阶段跑完,它交了一份日期错两年的投资报告——深思熟虑的Agent最危险的地方,是想得太像
人工智能
用户13571539981914 分钟前
凌晨三点,第 4 个反编译窗口
人工智能
Flynn Liang16 分钟前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
海海不掉头发23 分钟前
CSDN博客_时序预测9模型复现对比
人工智能·学习·软件工程
财迅通Ai44 分钟前
远信储能(9621.HK)招股开启,AI+储能跑出新范式
大数据·人工智能·远信储能