「连载」边缘计算(三十一)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模块的剖析就结束了。

未完待续......

相关推荐
EnCi Zheng几秒前
02-序列到序列模型
人工智能·神经网络·transformer
一起学开源4 分钟前
企业级AI应用开发底座应该怎么设计?
人工智能·系统架构·智能体
生成论实验室7 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
guslegend11 分钟前
第3章:快速入门SpringAI Alibaba
人工智能·springai
:mnong13 分钟前
打造 AI 级 Agent 架构
人工智能·架构
CS创新实验室18 分钟前
CS实验室行业报告:生物医药与生物工程行业就业分析报告
大数据·人工智能·生物医药
新知图书22 分钟前
项目资源调配优化建议(使用千问)
人工智能·ai助手·千问·高效办公
久菜盒子工作室23 分钟前
时寒冰:第五次产业大转移与未来30年国运:在“双向挤压”中实现惊险一跃
人工智能·学习
chaofan98027 分钟前
2026年大模型接入实测:高并发场景下企业级API网关横向对比与选型指南
人工智能·gpt·自动化·api
大尚来也37 分钟前
大模型能否替代自媒体创作?真实优缺点拆解
人工智能