Git Product home page Git Product logo

Comments (6)

shima-park avatar shima-park commented on June 12, 2024
  1. app.AllKeys()获取不到值,可以贴出一些使用代码吗?

  2. .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.

hookover avatar hookover commented on June 12, 2024

我是结合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.

hookover avatar hookover commented on June 12, 2024

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.

shima-park avatar shima-park commented on June 12, 2024

对的,我刚才意思可能没有表达清楚,目前结合viper使用是没有暴露配置的。
只有单独使用agollo库是有的。

from agollo.

shima-park avatar shima-park commented on June 12, 2024

你去读取的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.

hookover avatar hookover commented on June 12, 2024

加了App.SetConfigType("prop")之后,可以读取了,非常感谢!

viper.ReadInConfig() 读取本地配置时,似乎不用指定配置它也能解析出来格式
我看到你写了优化todo,可以参考一下

后期的参数暴露开发计划大概要多久呢

最后,再次感谢!

from agollo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.