archaius

package module
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 2, 2019 License: Apache-2.0 Imports: 17 Imported by: 66

README

go-archaius

Build Status

This is a dynamic configuration management tool for Go-Chassis which helps in configuration management for micro-services developed using Go-Chassis.

Meanwhile go-archaius is also decoupled with go chassis, it can be used in any projects.

The main objective of this project is to pull or sync the configuration from config-sources for a particular micro-service.

Why use go-archaius

it is hard to manage configurations in a distributed system. archaius can integrate with them. Tt keeps watching configuration changes, and fire change event if there is changes. so that you can easily implement a service which has hot-reconfiguration features. when you need to change configurations. you service has zero-down time

Sources

Go-Archaius supports multiple sources for the configuration.

  1. Command Line Sources - You can give the configurations key and values in the command lines arguments while starting the microservice.
  2. Environment Variable Sources - You can specify the sources of conifguration in Environment variable.
  3. External Sources - You can also specify the configuration sources to be some external config server from where the client can pull the configuration.
  4. Files Sources - You can specify some specific files from where client can read the configuration for the microservices.

You can specify multiple sources at a same time. go-archaius keeps all the sources marked with their precedence, in case if two sources have same config then source with higher precendence will be selected.

Event management

You can register event listener by key(exactly match or pattern match), to watch value change.

Refresh Mechanism

Go-Archaius client support 2 types of refresh mechanism:

  1. Web-Socket Based - In this client makes an web socket connection with the config server and keeps getting an events whenever any data changes.
refreshMode: 0
  1. Pull Configuration - In this type client keeps polling the configuration from the config server at regular intervals.
refreshMode: 1

Documentation

Overview

Package archaius provides you APIs which helps to manage files, remote config center configurations

Index

Constants

View Source
const (
	//UnsuccessfulArchaiusInit is of type string
	UnsuccessfulArchaiusInit = "issue with go-archaius initialization"
)

Variables

This section is empty.

Functions

func AddDI

func AddDI(dimensionInfo string) (map[string]string, error)

AddDI adds a NewDimensionInfo of which configurations needs to be taken

func AddFile

func AddFile(file string, opts ...FileOption) error

AddFile is for to add the configuration files into the configfactory at run time

func AddKeyValue

func AddKeyValue(key string, value interface{}) error

AddKeyValue is for to add the configuration key, value pairs into the configfactory at run time it is just affect the local configs

func AddSource

func AddSource(source core.ConfigSource) error

AddSource add source implementation

func DeleteKeyValue

func DeleteKeyValue(key string, value interface{}) error

DeleteKeyValue is for to delete the configuration key, value pairs into the configfactory at run time

func Exist

func Exist(key string) bool

Exist is check the configuration key existence

func Get

func Get(key string) interface{}

Get is for to get the value of configuration key

func GetBool

func GetBool(key string, defaultValue bool) bool

GetBool is gives the key value in the form of bool

func GetConfigs

func GetConfigs() map[string]interface{}

GetConfigs gives the information about all configurations

func GetConfigsByDI

func GetConfigsByDI(dimensionInfo string) map[string]interface{}

GetConfigsByDI is for to get the all configurations received dimensionInfo

func GetFloat64

func GetFloat64(key string, defaultValue float64) float64

GetFloat64 gives the key value in the form of float64

func GetInt

func GetInt(key string, defaultValue int) int

GetInt gives the key value in the form of GetInt

func GetString

func GetString(key string, defaultValue string) string

GetString gives the key value in the form of GetString

func GetStringByDI

func GetStringByDI(dimensionInfo, key string, defaultValue string) string

GetStringByDI is for to get the value of configuration key based on dimension info

func Init

func Init(opts ...Option) error

Init create a Archaius config singleton

func InitConfigCenter

func InitConfigCenter(ci ConfigCenterInfo) error

InitConfigCenter create a Config Center config singleton

func InitExternal

func InitExternal(opts ...Option) error

InitExternal create any config singleton

func RegisterListener

func RegisterListener(listenerObj core.EventListener, key ...string) error

RegisterListener to Register all listener for different key changes, each key could be a regular expression

func UnRegisterListener

func UnRegisterListener(listenerObj core.EventListener, key ...string) error

UnRegisterListener is to remove the listener

func UnmarshalConfig

func UnmarshalConfig(obj interface{}) error

UnmarshalConfig is for unmarshalling the configuraions of receiving object

Types

type ConfigCenterInfo

type ConfigCenterInfo struct {
	URL             string
	DimensionInfo   string
	TenantName      string
	EnableSSL       bool
	TLSConfig       *tls.Config
	RefreshMode     int
	RefreshInterval int
	Autodiscovery   bool
	ClientType      string
	Version         string
	RefreshPort     string
	Environment     string
}

ConfigCenterInfo has attribute for config center initialization

type ConfigFactory

type ConfigFactory struct {
	// contains filtered or unexported fields
}

ConfigFactory is a struct which stores configuration information

func (*ConfigFactory) AddByDimensionInfo

func (arc *ConfigFactory) AddByDimensionInfo(dimensionInfo string) (map[string]string, error)

AddByDimensionInfo adds a NewDimensionInfo of which configurations needs to be taken

func (*ConfigFactory) AddSource

func (arc *ConfigFactory) AddSource(source core.ConfigSource) error

AddSource return all values of different sources

func (*ConfigFactory) DeInit

func (arc *ConfigFactory) DeInit() error

DeInit return all values of different sources

func (*ConfigFactory) GetConfigurationByKey

func (arc *ConfigFactory) GetConfigurationByKey(key string) interface{}

GetConfigurationByKey return all values of different sources

func (*ConfigFactory) GetConfigurationByKeyAndDimensionInfo

func (arc *ConfigFactory) GetConfigurationByKeyAndDimensionInfo(dimensionInfo, key string) interface{}

GetConfigurationByKeyAndDimensionInfo get the value for a key in a particular dimensionInfo

func (*ConfigFactory) GetConfigurations

func (arc *ConfigFactory) GetConfigurations() map[string]interface{}

GetConfigurations dump complete configuration managed by config-client

Only return highest priority key value:-
1. ConfigFile 		2. Environment Variable
3. Commandline Argument	4. config Center configuration
config-center value being the highest priority

func (*ConfigFactory) GetConfigurationsByDimensionInfo

func (arc *ConfigFactory) GetConfigurationsByDimensionInfo(dimensionInfo string) map[string]interface{}

GetConfigurationsByDimensionInfo dump complete configuration managed by config-client Only return config Center configurations.

func (*ConfigFactory) GetValue

func (arc *ConfigFactory) GetValue(key string) cast.Value

GetValue an abstraction to return key's value in respective type

func (*ConfigFactory) GetValueByDI

func (arc *ConfigFactory) GetValueByDI(dimensionInfo, key string) cast.Value

GetValueByDI an abstraction to return key's value in respective type based on dimension info which is provided by user

func (*ConfigFactory) Init

func (arc *ConfigFactory) Init() error

Init intiates the Configurationfatory

func (*ConfigFactory) IsKeyExist

func (arc *ConfigFactory) IsKeyExist(key string) bool

IsKeyExist check existence of key

func (*ConfigFactory) Refresh

func (arc *ConfigFactory) Refresh(name string) error

Refresh pull config from source and update configuration map

func (*ConfigFactory) RegisterListener

func (arc *ConfigFactory) RegisterListener(listenerObj core.EventListener, keys ...string) error

RegisterListener Function to Register all listener for different key changes

func (*ConfigFactory) UnRegisterListener

func (arc *ConfigFactory) UnRegisterListener(listenerObj core.EventListener, keys ...string) error

UnRegisterListener remove listener

func (*ConfigFactory) Unmarshal

func (arc *ConfigFactory) Unmarshal(obj interface{}) error

Unmarshal function is used in the case when user want his yaml file to be unmarshalled to structure pointer Unmarshal function accepts a pointer and in called function anyone can able to get the data in passed object Unmarshal only accepts a pointer values Unmarshal returns error if obj values are 0. nil and value type. Procedure:

  1. Unmarshal first checks the passed object type using reflection.
  2. Based on type Unmarshal function will check and set the values ex: If type is basic types like int, string, float then it will assigb directly values, If type is map, ptr and struct then it will again send for unmarshal untill it find the basic type and set the values

type ConfigurationFactory

type ConfigurationFactory interface {
	// Init ConfigurationFactory
	Init() error
	// dump complete configuration managed by config-client based on priority
	// (1. config Center 2. Commandline Argument 3.Environment Variable  4.ConfigFile , 1 with highest priority
	GetConfigurations() map[string]interface{}
	// dump complete configuration managed by config-client for config Center based on dimension info.
	GetConfigurationsByDimensionInfo(dimensionInfo string) map[string]interface{}
	// add the dimension info for other services
	AddByDimensionInfo(dimensionInfo string) (map[string]string, error)
	// return all values of different sources
	GetConfigurationByKey(key string) interface{}
	// check for existence of key
	IsKeyExist(string) bool
	// unmarshal data on user define structure
	Unmarshal(structure interface{}) error
	// Add custom sources
	AddSource(core.ConfigSource) error
	//Function to Register all listener for different key changes, each key could be a regular expression
	RegisterListener(listenerObj core.EventListener, key ...string) error
	// remove listener
	UnRegisterListener(listenerObj core.EventListener, key ...string) error
	// DeInit
	DeInit() error
	// an abstraction to return key's value in respective type
	GetValue(key string) cast.Value
	// return values of config-center source based on key and dimension info
	GetConfigurationByKeyAndDimensionInfo(dimensionInfo, key string) interface{}
	// an abstraction to return key's value in respective type based on dimension info which is provided by user
	GetValueByDI(dimensionInfo, key string) cast.Value
	Refresh(name string) error
}

ConfigurationFactory is a list of Interface for config Center

func GetConfigFactory

func GetConfigFactory() ConfigurationFactory

GetConfigFactory return factory

func NewConfigFactory

func NewConfigFactory() (ConfigurationFactory, error)

NewConfigFactory creates a new configuration object for config center

type EventListener

type EventListener struct {
	Name    string
	Factory ConfigurationFactory
}

EventListener is a struct having information about registering key and object

func (EventListener) Event

func (e EventListener) Event(event *core.Event)

Event is invoked while generating events at run time

type FileOption

type FileOption func(options *FileOptions)

FileOption is a func

func WithFileHandler

func WithFileHandler(h filesource.FileHandler) FileOption

WithFileHandler use custom handler

type FileOptions

type FileOptions struct {
	Handler filesource.FileHandler
}

FileOptions for AddFile func

type Option

type Option func(options *Options)

Option is a func

func WithCommandLineSource

func WithCommandLineSource() Option

WithCommandLineSource enable cmd line source

func WithConfigCenter

func WithConfigCenter(cci ConfigCenterInfo) Option

WithConfigCenter accept the information for initiating a config center client and archaius config source

func WithDefaultFileHandler

func WithDefaultFileHandler(handler filesource.FileHandler) Option

WithDefaultFileHandler let user custom handler

func WithENVSource

func WithENVSource() Option

WithENVSource enable env source

func WithExternalSource

func WithExternalSource(e core.ConfigSource) Option

WithExternalSource accept the information for initiating a External source

func WithMemorySource

func WithMemorySource(e core.ConfigSource) Option

WithMemorySource accept the information for initiating a Memory source

func WithOptionalFiles

func WithOptionalFiles(f []string) Option

WithOptionalFiles tell archaius to manage files, if not exist will not return error

func WithRequiredFiles

func WithRequiredFiles(f []string) Option

WithRequiredFiles tell archaius to manage files, if not exist will return error

type Options

type Options struct {
	RequiredFiles    []string
	OptionalFiles    []string
	FileHandler      filesource.FileHandler
	ConfigCenterInfo ConfigCenterInfo
	UseCLISource     bool
	UseENVSource     bool
	ExternalSource   core.ConfigSource
}

Options hold options

Directories

Path Synopsis
Package core provides a list of interface for Dispatcher and ConfigMgr
Package core provides a list of interface for Dispatcher and ConfigMgr
cast
Package cast provides the typeCasting of an object
Package cast provides the typeCasting of an object
config-manager
Package configmanager provides functions to communicate to Config-Center Package configmanager provides deserializer
Package configmanager provides functions to communicate to Config-Center Package configmanager provides deserializer
event-system
Package eventsystem provides the different Listeners
Package eventsystem provides the different Listeners
examples
hack
* Created by on 2017/7/19.
* Created by on 2017/7/19.
sources
commandline-source
Package commandlinesource created on 2017/6/22.
Package commandlinesource created on 2017/6/22.
configcenter
Package configcenter created on 2017/6/22.
Package configcenter created on 2017/6/22.
enviromentvariable-source
Package envconfigsource created on 2017/6/22.
Package envconfigsource created on 2017/6/22.
file-source
Package filesource created on 2017/6/22.
Package filesource created on 2017/6/22.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL