使用Viper读取Nacos配置(开源)
使用Viper读取Nacos配置(开源)
一、前言
目前Viper支持的Remote远程读取配置如 etcd, consul;目前还没有对Nacos进行支持,本文中将开源一个Nacos的Viper支持库, 开源地址在文章的最下方.
实现这个仓库的主要目的是为了,最终集成到我们的yoyogo框架中。
二、什么是Viper
Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。
2.1 它支持以下特性:
- 设置默认值
- 从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
- 实时监控和重新读取配置文件(可选)
- 从环境变量中读取
- 从远程配置系统remote(etcd或Consul)读取并监控配置变化
- 从命令行参数读取配置
- 从buffer读取配置
- 显式配置值
2.2 读取本地文件
viper.SetConfigFile("./config.yaml") // 指定配置文件路径
viper.SetConfigName("config") // 配置文件名称(无扩展名)
viper.SetConfigType("yaml") // 如果配置文件的名称中没有扩展名,则需要配置此项
viper.AddConfigPath("/etc/appname/") // 查找配置文件所在的路径
viper.AddConfigPath("$HOME/.appname") // 多次调用以添加多个搜索路径
viper.AddConfigPath(".") // 还可以在工作目录中查找配置
err := viper.ReadInConfig() // 查找并读取配置文件
if err != nil { // 处理读取配置文件的错误
panic(fmt.Errorf("Fatal error config file: %s \n", err))
}
本篇文章重点着重于remote部分,Nacos的支持.
Viper remote
在Viper中启用远程支持,需要在代码中匿名导入viper/remote这个包。
import _ "github.com/spf13/viper/remote"
通过remote,Viper将支持读取从Key/Value存储( 例如etcd或Consul或本文中的Nacos ).
Viper加载配置值的优先级
磁盘上的配置文件 > 命令行标志位 > 环境变量 > 远程Key/Value存储 > 默认值 。
Nacos 支持
引用我们的开源库 https://github.com/yoyofxteam/nacos-viper-remote
import (
"github.com/spf13/viper"
remote "github.com/yoyofxteam/nacos-viper-remote"
)
在项目中使用:
runtime_viper := viper.New()
// 配置 Viper for Nacos 的远程仓库参数
remote.SetOptions(&remote.Option{
Url: "localhost", // nacos server 多地址需要地址用;号隔开,如 Url: "loc1;loc2;loc3"
Port: 80, // nacos server端口号
NamespaceId: "public", // nacos namespace
GroupName: "DEFAULT_GROUP", // nacos group
Config: remote.Config{ DataId: "config_dev" }, // nacos DataID
Auth: nil, // 如果需要验证登录,需要此参数
})
err := remote_viper.AddRemoteProvider("nacos", "localhost", "")
remote_viper.SetConfigType("yaml")
_ = remote_viper.ReadRemoteConfig() //sync get remote configs to remote_viper instance memory . for example , remote_viper.GetString(key)
_ = remote_viper.WatchRemoteConfigOnChannel() //异步监听Nacos中的配置变化,如发生配置更改,会直接同步到 viper实例中。
appName := remote_viper.GetString("key") // sync get config by key
fmt.Println(appName)
// 这里不是必须的,只为了监控Demo中的配置变化,并打印出来
go func() {
for {
time.Sleep(time.Second * 30) // 每30秒检查配置是否发生变化
appName = config_viper.GetString("yoyogo.application.name")
fmt.Println(appName)
}
}()
最后
实现这个仓库的主要目的是为了,最终集成到我们的yoyogo框架中。
本文提及的开源库地址:
nacos-viper-remote
https://github.com/yoyofxteam/nacos-viper-remote
yoyogo
https://github.com/yoyofx/yoyogo
使用Viper读取Nacos配置(开源)的更多相关文章
- Nacos(五):多环境下如何“读取”Nacos中相应的配置
前言 前景回顾: Nacos(四):SpringCloud项目中接入Nacos作为配置中心 Nacos(三):Nacos与OpenFeign的对接使用 Nacos(二):SpringCloud项目中接 ...
- 在.NET Core中用最原生的方式读取Nacos的配置
背景 之前老黄写过一篇<ASP.NET Core结合Nacos来完成配置管理和服务发现>简单介绍了如何让.NET Core程序接入Nacos,之前的SDK里面更多的是对Nacos的Open ...
- nacos配置中心模块详解
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 配置中心 业务上的配置,功能开关,服务治理上对弱依赖的降级,甚至数据库的密码等,都可能用到动态 ...
- SpringBoot使用Nacos配置中心
本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云 ...
- Nacos配置服务原理
Nacos Client配置机制 spring加载远程配置 在了解NACOS客户端配置之前,我们先看看spring怎么样加载远程配置的.spring 提供了加载远程配置的扩展接口 PropertySo ...
- Spring Cloud 系列之 Alibaba Nacos 配置中心
Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...
- Nacos配置中心使用
在系统开发过程中,开发者通常会将一些需要变更的参数.变量等从代码中分离出来独立管理,以独立的配置文件的形式存在.目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进 ...
- Spring Cloud Config、Apollo、Nacos配置中心选型及对比
Spring Cloud Config.Apollo.Nacos配置中心选型及对比 1.Nacos 1.1 Nacos主要提供以下四大功能 2.Spring Cloud Config 3.Apollo ...
- Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答
本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富- 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服 ...
随机推荐
- IVMS-5000海康平台安装
某学校系统因中勒索病毒重装监控系统平台 一 安装前准备 二 数据库安装 采用免安装版本安装,原先平台采用免安装版mysql 5.6.24 ,学校IT管理员将数据库文件完全复制,用虚拟机将数据库搭 ...
- selenium之元素定位的方法(一)
WebDriver 对象有多种方法用于在页面中寻找元素.他们被分成find_element_*和find_elements_*方法.find_element_*方法返回一个WebElement对象,代 ...
- 使用python进行接口自动化测试,批量执行测试用例
工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...
- .NET Core Generic Host项目使用Topshelf部署为Windows服务
1..NET Core Generic Host是什么? 在.NET Core 2.1版本加入了一种新的Host,即Generic Host(通用主机). 现在在2.1版本的Asp.Net Core中 ...
- 文件锁fcntl
一.python中的文件锁 我们在写python应用的时候,当涉及到多个进程向同一个文件write(或者read)的情况,如果几个进程同时都对这个文件进行写操作,那么文件的内容就会变得非常混乱,这个时 ...
- 2017-2018 ACM-ICPC Northern Eurasia(A.Archery Tournament)
题目链接:https://vjudge.net/problem/Gym-101630A 题意: n个事件,t=1 代表增加一个圆心为(x,y),半径为 abs(y)的靶子,t=2,代表射击的坐标为(x ...
- 5、Spring教程之依赖注入
概念 依赖注入(Dependency Injection,DI). 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装 ...
- Vulkan移植GpuImage(二)Harris角点检测与导向滤波
Harris角点检测 UI还是用的上次扣像的,只有前后置可以用,别的没有效果,只看实现就好. 相应源码 在实现之前,我先重新整理编译glsl的生成工具,如Harris角点检测中间计算过程需要针对rgb ...
- Android 学习之活动的生命周期
•返回栈 Android 中的活动是可以叠层的: 我们每启动一个新的活动,就会覆盖在原活动之上: 然后点击 Back 键会销毁最上面的活动,下面一个活动就会重新显示出来: 其实 Android 是使用 ...
- Etcd常用运维命令
目录 常用命令 常见操作 如何缩容? 如何扩容? 数据目录丢失或被误删除,节点启动失败或者加入集群报错? 操作步骤 操作步骤不正确的各种常见错误日志 常用命令 #查看集群member情况 etcdct ...