golang consul tools操作 consul 键值的工具

联合创作 · 2023-09-28 10:17

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)
}
浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报