Viper for Nacos

开源远程配置库
授权协议 MIT
开发语言 Google Go
所属分类 服务器软件、 终端服务器/远程连接
软件类型 开源软件
地区 国产
投 递 者 魏成济
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

目前 Viper 支持的 Remote 远程读取配置如 etcd, consul;目前还没有对Nacos进行支持。Viper for Nacos 是一个开源的 Nacos 的 Viper 支持库,实现这个仓库的主要目的是为了,最终集成到我们的 yoyogo 框架中。

Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。

它支持以下特性:#

  • 设置默认值
  • 从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
  • 实时监控和重新读取配置文件(可选)
  • 从环境变量中读取
  • 从远程配置系统remote(etcd或Consul)读取并监控配置变化
  • 从命令行参数读取配置
  • 从buffer读取配置
  • 显式配置值

读取本地文件#

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://gitee.com/yoyofx/nacos-viper-remote

yoyogo#

https://gitee.com/yoyofx/yoyogo

���� YoyoGo is a simple, light and fast , dependency injection based micro-service framework written in Go. Support Nacos ,Consoul ,Etcd ,Eureka ,kubernetes.

  • 配置文件加载: 主流的配置文件格式:toml、yaml、json、xml、ini(conf、properties) 配置的来源:文本文件、环境变量、配置中心(携程开源的apollo配置中心、nacos) 支持配置热加载 viper是适用于GO应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。 安装 go get github.com/spf13/vip

  • viper是用来读取的配置的库,viper可以从环境变量,yaml文件,json文件,命令行等读取配置,存到自己的key,value中 话不多说,看示例 go get github.com/spf13/viper 设置默认值 func InitConfig() { v := viper.New() v.SetDefault("ContentDir", "content") fmt.Prin

  • golang 实现nacos获取配置和服务注册-支持集群 初始化客户端,结构体中IpAddres 可以配置多个地址 package utils import ( "github.com/nacos-group/nacos-sdk-go/clients/config_client" "github.com/nacos-group/nacos-sdk-go/clients/naming_clie

 相关资料
  • 我明白了。错误和不理解缺少的部分。 在nod和chromedriver上安装了chromehttps://github.com/SeleniumHQ/selenium/wiki/ChromeDriver 用Chrome驱动程序测试 消息:测试方法SeleniumGridSimkeTest.单元测试1.引发异常:System.无效操作异常:无法创建新服务: ChromeDriverService构建

  • 本文向大家介绍Oracle 配置远程访问教程,包括了Oracle 配置远程访问教程的使用技巧和注意事项,需要的朋友参考一下 服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 多个IP时,如下: 2.TNS 配置 多个IP时,如下: 3.停止和启动服务 先停止以下服务,然后再启动.

  • 我创建了一个新的存储库: 然后我想将我的提交推送到github上创建的空远程存储库,因此我必须设置远程。 使用以下命令之间有什么区别 最后我执行推送: 当我在之后调用时会发生什么?是否创建来源?如果origin在之后已经存在,那么在我的场景中使用这些命令没有区别,对吧?

  • Firebase远程配置有其他选择吗?我需要为中国市场提供一个应用程序,我不确定它是否会起作用

  • 在创建adobe公共存储库的远程存储库时,我正在努力进行一个使用JFrog Artifictory云的简单测试。 我配置一个远程作为maven存储库,在URL我已经插入https://repo.adobe.com/nexus/content/repositories/public和测试确定的名称只是给一个adobe-public名称,并点击保存和完成。 在那之后,我试图从中获得一个现有的(在rep

  • 利用光环板的Wi-Fi功能,可以实现账号云广播,云广播通过互联网将消息或数值传递给舞台角色,从而实现舞台角色与硬件的互动。本程序中,实现了通过点击舞台中的灯泡,远程控制光环板灯环亮灭的功能。 启用上传模式 点击启用上传模式。 舞台背景与角色 1. 删除默认角色Panda 2. 选择“背景”,点击“造型”,添加背景“Office3” 3. 选择“角色”,添加“bulb”,并设置造型为“bulb2”

  • 似乎至少有三种方法可以做听起来相同的事情。 他们的区别是什么 注意:这看起来可能是这个的重复,但这些答案是不完整的,并且不能解释更改URL与“远程”的区别? 编辑: 做一些进一步的谷歌搜索:从这个SO答案中: git中的远程基本上是另一个存储库的书签,您可能希望从中提取或推送代码。带书签的存储库可能位于本地计算机上的另一个文件夹、远程服务器上,甚至可能是存储库本身。。。但最简单的类比是书签。存储库