consul 自动配置工具

xie1xiao1jun · 2021-04-26 20:06:56 · 1201 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-04-26 20:06:56 的主题,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1201 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传