golang consul tools操作 consul 键值的工具
golang consul tools 的一个操作 consul 键值的工具,支持结构体整体打包查询及更新。
使用
安装
go get -u github.com/xxjwxc/consult@master
新建一个连接
import ( "github.com/xxjwxc/consult/consulkv" ) conf := consulkv.NewConfig()
or
With Options
conf := consulkv.NewConfig( consulkv.WithPrefix(prefix), // consul kv 前缀 consulkv.WithAddress(address), // consul 地址 consulkv.WithAuth(username, password), // cosul 用户密码 consulkv.WithToken(token), // cousl token consulkv.WithLoger(loger), // loger )
Init
if err := conf.Init();err !=nil { return err }
Put
if err := conf.Put(key, value);err !=nil { return err }
Delete
if err := conf.Delete(key);err !=nil { return err }
Get
// scan if err := conf.Get(key).Scan(x);err !=nil { return err } // get float float := conf.Get(key).Float() // get float with default float := conf.Get(key).Float(defaultFloat) // get int i := conf.Get(key).Int() // get int with default i := conf.Get(key).Int(defaultInt)
监听
conf.Watch(path, func(r *Result){ r.Scan(x) })
停止监听
// stop single watcher conf.StopWatch(path) // stop multiple watcher conf.StopWatch(path1, path2) // stop all watcher conf.StopWatch()
通过tag自动获取/自动更新
- 定义变量时添加
consul:""
标签进行自动注册及获取
import ( "github.com/xxjwxc/consult" ) type Info struct { Port string `yaml:"port" consul:"port"` // 端口号 } var info Info consult.AutoLoadConfig(conf, &info) // 自动加载 consult.AutoSetConfig(conf, &info, false) // 执行一次自动更新
完整例子
import ( "fmt" "testing" "github.com/xxjwxc/consult/consulkv" "github.com/xxjwxc/consult" ) type Config struct { MySQLInfo MysqlDbInfo `yaml:"mysql_info" consul:"mysql_info"` Port string `yaml:"port" consul:"port"` // 端口号 } // MysqlDbInfo mysql database information. mysql 数据库信息 type MysqlDbInfo struct { Host string `validate:"required" consul:"host"` // Host. 地址 Port int `validate:"required" consul:"port"` // Port 端口号 Username string `validate:"required" consul:"username"` // Username 用户名 Password string `consul:"password"` // Password 密码 Database string `validate:"required" consul:"database"` // Database 数据库名 Type int // 数据库类型: 0:mysql , 1:sqlite , 2:mssql } func main() { conf := consulkv.NewConfig( consulkv.WithPrefix("service/servername"), // consul kv prefix consulkv.WithAddress("192.155.1.150:8500"), // consul address ) if err := conf.Init(); err != nil { mylog.Error(err) return } var config Config consult.AutoLoadConfig(conf, &config) // 自动加载 fmt.Println(config) consult.AutoSetConfig(conf, &config, false) // 执行一次更新 fmt.Println(config) }
评论