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

(接上篇)

配置模块初始化

配置模块初始化具体如下所示。

err := archaius.Init()

...

CONFIG = archaius.GetConfigFactory()

(3) 获取内存配置源

获取内存配置源具体如下所示。

ms := memoryconfigsource.NewMemoryConfigurationSource()

CONFIG.AddSource(ms)

(4)获取命令行配置源

获取命令行配置源具体如下所示。

cmdSource := commandlinesource.NewCommandlineConfigSource()

CONFIG.AddSource(cmdSource)

(5)获取环境变量配置源

获取环境变量配置源具体如下所示。

envSource := envconfigsource.NewEnvConfigurationSource()

CONFIG.AddSource(envSource)

(6)根据配置文件路径获取配置源

根据配置文件路径获取配置源具体如下所示。

confLocation := getConfigDirectory() + "/conf"

_, err = os.Stat(confLocation)

if !os.IsExist(err) {

os.Mkdir(confLocation, os.ModePerm)

}

err = filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error {

if f == nil {

return err

}

if f.IsDir() {

return nil

}

ext := strings.ToLower(path.Ext(location))

if ext == ".yml" || ext == ".yaml" {

archaius.AddFile(location)

}

return nil

})

...

})

目前,KubeEdge所用的读取配置文件的方式是根据配置文件路径获取配置源。下面深入剖析该配置文件读取方式,首先确定配置所在路径。getConfigDirectory()函数定义具体如下所示。

KubeEdge/beehive/pkg/common/config/config.go

//constants to define config paths

const (

ParameterConfigPath     = "config-path"

EnvironmentalConfigPath = "GOARCHAIUS_CONFIG_PATH"

)

...

// get the configuration file path

func getConfigDirectory() string {

if config, err := CONFIG.GetValue(ParameterConfigPath).ToString(); err == nil {

return config

}

if config, err := CONFIG.GetValue(EnvironmentalConfigPath).ToString(); err == nil {

return config

}

return util.GetCurrentDirectory()

}

getConfigDirectory()函数中获取配置文件所在目录的方式有如下3种。

1)根据ParameterConfigPath获取,具体如下所示。

// get the configuration file path

func getConfigDirectory() string {

if config, err := CONFIG.GetValue(ParameterConfigPath).ToString(); err == nil {

return config

}

2)根据EnvironmentalConfigPath获取,具体如下所示。

if config, err := CONFIG.GetValue(EnvironmentalConfigPath).ToString(); err == nil {

return config

}

3)根据可执行文件运行所在的当前目录下获取,具体如下所示。

return util.GetCurrentDirectory()

接着分析怎么读入配置文件,具体读入方法如下所示。

KubeEdge/beehive/pkg/common/config/config.go

confLocation := getConfigDirectory() + "/conf"

_, err = os.Stat(confLocation)

if !os.IsExist(err) {

os.Mkdir(confLocation, os.ModePerm)

}

err = filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error {

if f == nil {

return err

}

if f.IsDir() {

return nil

}

ext := strings.ToLower(path.Ext(location))

if ext == ".yml" || ext == ".yaml" {

archaius.AddFile(location)

}

return nil

})

...

})

在获取了配置文件所在的目录confLocation后,接着进行如下操作。

1)判断目录是否存在,如果不存在创建该目录,具体如下。

confLocation := getConfigDirectory() + "/conf"

_, err = os.Stat(confLocation)

if !os.IsExist(err) {

os.Mkdir(confLocation, os.ModePerm)

}

2)遍历配置文件目录下符合条件的文件,加入配置信息源,具体如下。

err = filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error {

if f == nil {

return err

}

if f.IsDir() {

return nil

}

ext := strings.ToLower(path.Ext(location))

if ext == ".yml" || ext == ".yaml" {

archaius.AddFile(location)

}

return nil

})

...

})

到此 ,config.CONFIG就获取了KubeEdge所需配置文件内容。

通过上面的分析,我们知道KubeEdge是通过KubeEdge/beehive/pkg/common/config来读取所需的配置文件的,而KubeEdge/beehive/pkg/common/config封装了archaius(https://GitHub.com/Netflix/archaius)。

 「未完待续……

点击下方标题可阅读技术文章

「连载」边缘计算(一)01-16:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(二)01-17:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(三)01-18:边缘部分原理解析(原理篇)
「连载」边缘计算(四)01-19:边缘部分原理解析(原理篇)
「连载」边缘计算(五)01-22:边缘部分原理解析(原理篇)
「连载」边缘计算(六)01-23:边缘部分原理解析(原理篇)
「连载」边缘计算(七)01-24:边缘部分原理解析(原理篇)
「连载」边缘计算(八)01-25:边缘部分源码(源码分析篇)
「连载」边缘计算(九)01-26:边缘部分源码(源码分析篇)

「连载」边缘计算(十)01-29:边缘部分源码(源码分析篇)
「连载」边缘计算(十一)01-30:边缘部分源码(源码分析篇)
「连载」边缘计算(十二)01-31:边缘部分源码(源码分析篇)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序配置服务器域名

配置小程序的服务器域名是一个重要的步骤,因为它关系到小程序能否正常访问后端服务。在微信小程序中,出于安全考虑,所有的网络请求都需要在小程序管理后台进行域名配置,只有配置过的域名才可以被小程序访问。 步骤概述 获取服务器…

微服务调用之Dubbo实现

目录 RPC与Dubbo Springboot整合Dubbo 服务端实现 消费端实现 RPC与Dubbo RPC(Remote Procedure Call)是指远程过程调用。 常见的RPC框架有Dubbo(Alibaba )、gRPC(Google)、Thrift(Facebo…

【Web】CVE-2021-22448 Log4j RCE漏洞学习

目录 复现流程 漏洞原理 复现流程 启动HTTP->启动LDAP->执行Log4j vps起个http服务,放好Exploit.class这个恶意字节码 LDAPRefServer作为恶意LDAP服务器 import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; import javax.ne…

WordPress主题YIA如何将首页的置顶小工具改为站长推荐小工具?

YIA主题有“置顶推荐”小工具,首页文章列表页有置顶功能,可在YIA主题设置 >> 列表 >> 首页-最新发布 >> 显示置顶文章中开启或关闭。如果将“置顶推荐”小工具添加到“首页顶栏”,同时也开启首页最新发布的“显示置顶文章”…

代码生成器(新):mybatis-plus-generator使用指南

代码生成器(新)官网 后端代码:点击查看 LearnElementUiAndSpringBoot 提醒:LearnElementUiAndSpringBoot下载完后,在运行调试 Main.java里的main方法之前,除了utils包和Main.java文件,其他包需…

小程序中封装下拉选择框

小程序中没有现成的下拉选择组件&#xff0c;有个picker组件&#xff0c;但是是底部弹出的&#xff0c;不满足我的需求&#xff0c;所以重新封装了一个。 封装的下拉组件 html部分&#xff1a; <view class"select_all_view"><!-- 内容说明&#xff0c;可…

开源软件的未来发展趋势

开源软件的影响力 开源软件的影响力已经渗透到全球的各个角落&#xff0c;不仅改变了软件开发的方式&#xff0c;也影响了整个技术产业的发展。以下是开源软件影响力的一些主要方面&#xff1a; 推动技术创新&#xff1a;开源软件的开放性和协作性促进了技术的快速创新。全球的…

C# OMRON PLC FINS TCP协议简单测试

FINS(factory interface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令&#xff0f;响应系统。运用 FINS指令可实现各种网络间的无缝通信&#xff0c;包括用于信息网络的 Etherne(以太网)&#xff0c;用于控制网络的Controller Link和SYSMAC LINK。…

openEuler 22.03 docker安装elasticsearch 7.17.17

Docker是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 以下是使用Docker安装…

sklearn实现数据标准化(Standardization)和归一化(Normalization)

标准化&#xff08;Standardization&#xff09; sklearn的标准化过程&#xff0c;即包括Z-Score标准化&#xff0c;也包括0-1标准化&#xff0c;并且即可以通过实用函数来进行标准化处理&#xff0c;同时也可以利用评估器来执行标准化过程。接下来我们分不同功能以的不同实现…

mysql问题

面试官&#xff1a;MySQL中&#xff0c;如何定位慢查询? 候选人&#xff1a; 嗯~&#xff0c;我们当时做压测的时候有的接口非常的慢&#xff0c;接口的响应时间超过了2秒以上&#xff0c;因为我们当时的系统部署了运维的监控系统Skywalking &#xff0c;在展示的报表中可以看…

es6中标签模板

之所以写这篇文章&#xff0c;是因为标签模板是一个很容易让人忽略的知识点 首先我们已经非常熟悉模板字符串的使用方法 const name "诸葛亮" const templateString hello, My name is ${name}标签模板介绍 这里的标签模板其实不是模板&#xff0c;而是函数调用…

VUE3语法--computed计算属性中get和set使用案例

1、功能概述 计算属性computed是Vue3中一个响应式的属性,最大的用处是基于多依赖时的监听。也就是属性A的值可以根据其他数据的变化而响应式的变化。 在Vue3中,你可以使用computed函数来定义计算属性。computed函数接收两个参数:一个包含getter和setter函数的对象和可选的…

【Redis】实现缓存及相关问题

Redis实现缓存及相关问题 认识缓存 缓存就是数据交换的缓冲区&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 缓存的作用&#xff1a; 降低后端负载提高读写效率&#xff0c;降低响应时间 缓存的成本&#xff1a; 数据一致性成本代码维护成本运维成本 …

vue学习91-105

vue的基本认知p91 创建一个空仓库p93 vue 路由 vuex版本 2 3 3 3 4 4 npm的vuex装包npm install vuex --save vuex里有仓库,仓库放vuex核心代码&#xff0c;所有组件都能访问到 const store new Vuex.Store()//访问stored this.$store如何提供$访问vuex的数据p94 核心概念-…

梁航影院影视混剪,手机影视教学+电脑影视教学

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/88804173 手机影视教学&#xff1a; 发布作品的时间及发布过程中注意的问题 剪辑思路 如何参与变现 十六比九视频制作教程 账号定位及思路提升 作品的垂直度以及如何选剧找剧 作品质量提升及案例实…

春节运维不打烊:一体化运维高效保障企业IT与机房环境

随着技术的不断发展和企业数字化转型的深入&#xff0c;IT运维已经成为企业运营不可或缺的一部分。尤其在春节期间&#xff0c;一体化运维管理系统以其独特的技术特性和卓越的功能&#xff0c;为企业的稳定运行提供了坚实保障&#xff0c;确保了节日的祥和与工作的连续高效。 一…

【爬虫实战】全过程详细讲解如何使用python获取抖音评论,包括二级评论

简介&#xff1a; 前两天&#xff0c;TaoTao发布了一篇关于“获取抖音评论”的文章。但是之前的那一篇包涵的代码呢仅仅只能获取一级评论。虽然说抖音的一级评论挺精彩的了&#xff0c;但是其实二级评论更加有意思&#xff0c;同时二级评论的数量是很多。所以二级评论是非常值…

Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案

前言 在使用 Gin 框架处理前端请求数据时&#xff0c;必须关注安全性问题&#xff0c;以防范常见的攻击。本文将探讨 Gin 框架中常见的安全问题&#xff0c;并提供相应的处理方法&#xff0c;以确保应用程序的稳健性和安全性。 处理前端请求数据时&#xff0c;确保应用程序的…

【智慧工业】东胜物联定位与跟踪解决方案,为方案商提供蓝牙网关、信标等物联网智能硬件设备

利用东胜物联的蓝牙网关我们的合作伙伴在德国的建筑工地成功实施了基于物联网蓝牙的员工出勤和跟踪管理解决方案&#xff0c;该解决方案简化了员工时间表并增强了工作流程&#xff0c;为经理和主管提供了更多时间来专注于项目洞察&#xff0c;并提高了员工的效率、绩效和生产力…