Comments (6)
-
app.AllKeys()获取不到值,可以贴出一些使用代码吗?
-
.agollo备份文件可以在{New, NewWithConfigFile, InitWithDefaultConfigFile}
这些创建或者初始化的参数中,传入 agollo.BackupFile("your_backup_filepath")来替换成你指定的目录。
更多可选配置项可以参考options.go中的Options结构体。
目前,结合viper使用,这块可选配置我默认掉了-_-!,只使用了下面配置初始化。
ag, err := agollo.New(
endpoint,
appid,
agollo.AutoFetchOnCacheMiss(),
agollo.FailTolerantOnBackupExists(),
)
from agollo.
我是结合viper来使用的,尝试了以下agollo.New int测试,但似乎并没有达到效果,请帮忙看看是否正确
备份文件.agollo是会生成出来的,文件中也会有相应json格式的内容
viper.Get('var') 打印nil
viper.AllKeys() 打印为空
package config
import (
"fmt"
"github.com/shima-park/agollo"
"github.com/shima-park/agollo/viper-remote"
"github.com/spf13/viper"
"strings"
"time"
)
func viperInit() {
var (
configFile string
env string
err error
)
App = viper.New()
Local = viper.New()
Local.AutomaticEnv()
env = Local.GetString(envName)
switch strings.ToLower(env) {
case "sta":
configFile = "sta.properties"
case "prd":
configFile = "prd.properties"
default:
configFile = "dev.properties"
}
Local.SetConfigFile("./config/" + configFile)
if err = Local.ReadInConfig(); err != nil {
panic("基础配置文件读取异常:" + err.Error())
}
//if err = agollo.Init(
// Local.GetString("APOLLO_SERVER_IP"),
// Local.GetString("APOLLO_ID"),
// agollo.BackupFile("./config/agollo.local"),
//); err != nil {
// panic("agollo配置初始化失败:" + err.Error())
//}
_, err = agollo.New(
Local.GetString("APOLLO_SERVER_IP"),
Local.GetString("APOLLO_ID"),
agollo.AutoFetchOnCacheMiss(),
agollo.FailTolerantOnBackupExists(),
agollo.BackupFile("./config/agollo.local"),
)
remote.SetAppID(Local.GetString("APOLLO_ID"))
if err = App.AddRemoteProvider("apollo", Local.GetString("APOLLO_SERVER_IP"), Local.GetString("APOLLO_NAMESPACE")); err != nil {
panic("阿波罗配置中心初始化失败:" + err.Error())
}
if err = App.ReadRemoteConfig(); err != nil {
panic("阿波罗配置读取失败:" + err.Error())
}
watchRemoteConfig()
}
func watchRemoteConfig() {
go func() {
for {
fmt.Println(App.AllKeys(), App.Get("LOG_PATH")) //debug 打印所有keys
time.Sleep(time.Second * 5)
err := App.WatchRemoteConfig()
if err != nil {
Logger.Error("监听阿波罗配置错误:" + err.Error())
continue
}
}
}()
}
from agollo.
remote.go 文件中,似乎没有暴露配置参数
func newApolloConfigManager(appid, endpoint string) (*apolloConfigManager, error) {
if appID == "" {
return nil, errors.New("The appid is not set")
}
ag, err := newAgollo(appid, endpoint)
if err != nil {
return nil, err
}
return &apolloConfigManager{
agollo: ag,
}, nil
}
func newAgollo(appid, endpoint string) (agollo.Agollo, error) {
i, found := agolloMap.Load(endpoint)
if !found {
ag, err := agollo.New(
endpoint,
appid,
agollo.AutoFetchOnCacheMiss(),
agollo.FailTolerantOnBackupExists(),
)
if err != nil {
return nil, err
}
// TODO 监听apollo配置变化,同步配置,不关闭也没问题?
ag.Start()
agolloMap.Store(endpoint, ag)
return ag, nil
}
return i.(agollo.Agollo), nil
}
from agollo.
对的,我刚才意思可能没有表达清楚,目前结合viper使用是没有暴露配置的。
只有单独使用agollo库是有的。
from agollo.
你去读取的namespace的名字是什么样子的,viper这里需要设置文件格式,否则是无法将配置反序列化的。
// 1. 创建viper对象
App := viper.New()
// 2. 设置remote中apollo的appid,这是一个remote包中的全局变量
remote.SetAppID(appid)
// 3. 你在apollo中的配置文件的格式是什么,例如:"properties", "json", "yml", "yaml", "xml"
// !!! 这一步很重要,没有设置就会导致配置读出来是空的。因为viper不知道你从远端读回来的配置文件是什么格式的
// !!! 默认情况下,使用apollo中的application是properties格式的,使用如下配置方式
// 如果你新建了其它格式的namespace,例如xxx.json 对应修改成App.SetConfigType("json")
App.SetConfigType("prop")
// 4. 给viper对象添加远端apollo配置信息
// 目前库中会根据apollo的规则去分析namesapce的后缀,而判断是什么配置文件,进行反序列化 https://github.com/shima-park/agollo/blob/master/viper-remote/remote.go#L89
// viper这边remote的接口返回的是一个io.Reader,https://github.com/shima-park/agollo/blob/master/viper-remote/remote.go#L164
// 它这边也需要反序列化,所以需要上一步的SetConfigType。
// https://github.com/spf13/viper/blob/master/viper.go#L1697
// https://github.com/spf13/viper/blob/master/viper.go#L1382
App.AddRemoteProvider(provider, endpoint, namespace)
// 5. 读取RemoteProvider
// 这里会通过https://github.com/shima-park/agollo/blob/master/viper-remote/remote.go#L66
// 创建agollo对象,目前没有暴露options的配置
App.ReadRemoteConfig()
from agollo.
加了App.SetConfigType("prop")之后,可以读取了,非常感谢!
viper.ReadInConfig() 读取本地配置时,似乎不用指定配置它也能解析出来格式
我看到你写了优化todo,可以参考一下
后期的参数暴露开发计划大概要多久呢
最后,再次感谢!
from agollo.
Related Issues (20)
- start、watch 无法监听配置 HOT 5
- agollo v1.2.8, 启用从备份文件加载时, 在调用GetNameSpace(key)正常时, 会将备份文件的其他namespace的数据删除 HOT 1
- 能否为ApolloClient提供自定义签名入口 HOT 8
- 我不想要备份文件, 可以去掉么, 它无论如何都会创建一个备份文件我关不掉 HOT 6
- go mod tidy 报错 HOT 4
- 此客户端是如何支持多环境配置的? HOT 1
- can't get value by Env? HOT 2
- 没有贡献值不开心啊 HOT 4
- apollo中使用yaml格式的配置文件,viper读取为空 HOT 3
- 与viper 一起用时候怎么切换或者说选择apollo的cluster呢 HOT 4
- 为什么app.properties文件下储存的是json格式而不是property格式? HOT 1
- 为什么除了properties类型的数据能拉到,其他Json,Yaml的都拉不出来呢? HOT 1
- 用golang 1.18构建后拉不到配置,1.17正常。 HOT 5
- 可否加一个关闭备份选项
- 使用viper时,是否能暴露一个配置变更的方法 HOT 2
- agollo.Start()和viper同用时,配置变更后的读取操作会存在并发问题 HOT 1
- viper说明文档 好像不全 HOT 1
- viper 支持 secretKey HOT 1
- 签名计算bug HOT 3
- 启动后提示函数time.UnixMilli()错误
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from agollo.