V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xxjwxc
V2EX  ›  程序员

consul 自动配置工具

  •  
  •   xxjwxc ·
    xxjwxc · 2021-04-26 20:01:53 +08:00 · 1015 次点击
    这是一个创建于 1089 天前的主题,其中的信息可能已经有所发展或是发生改变。

    consult

    前言

    • consult 是对consul的二次封装,方便用户使用,
    • consult 提供一系列函数操作 consul
    • consult 支持 watcher
    • consult 支持tag标签自动获取 /自动更新

    使用

    安装

    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)
    }
    
    

    更多:

    xxjwxc consult consul

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   912 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 370ms · UTC 21:01 · PVG 05:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.