优化etcd Client
This commit is contained in:
parent
6beadd85f7
commit
fcf2830889
54
init.go
54
init.go
@ -10,19 +10,33 @@ package etcd
|
||||
import (
|
||||
"errors"
|
||||
"go.etcd.io/etcd/clientv3"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var (
|
||||
// Client 客户端
|
||||
Client *clientv3.Client
|
||||
Client *client
|
||||
)
|
||||
|
||||
// InitEtcdClient 初始化etcd连接
|
||||
func init() {
|
||||
Client = &client{
|
||||
table: make(map[string]*clientv3.Client),
|
||||
lock: &sync.RWMutex{},
|
||||
}
|
||||
}
|
||||
|
||||
type client struct {
|
||||
// table 实例表
|
||||
table map[string]*clientv3.Client
|
||||
lock *sync.RWMutex
|
||||
}
|
||||
|
||||
// AddEtcdClient 初始化etcd连接
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:53 上午 2021/11/23
|
||||
func InitEtcdClient(cfg clientv3.Config) error {
|
||||
func (c *client) AddEtcdClient(flag string, cfg clientv3.Config) error {
|
||||
if nil == cfg.Endpoints || len(cfg.Endpoints) == 0 {
|
||||
return errors.New("endpoints is empty")
|
||||
}
|
||||
@ -51,9 +65,39 @@ func InitEtcdClient(cfg clientv3.Config) error {
|
||||
if cfg.MaxCallRecvMsgSize <= 0 {
|
||||
cfg.MaxCallRecvMsgSize = DefaultMaxCallRecvMsgSize
|
||||
}
|
||||
var err error
|
||||
if Client, err = clientv3.New(cfg); nil != err {
|
||||
var (
|
||||
flagClient *clientv3.Client
|
||||
err error
|
||||
)
|
||||
if flagClient, err = clientv3.New(cfg); nil != err {
|
||||
return errors.New("etcd连接失败 : " + err.Error())
|
||||
}
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
c.table[flag] = flagClient
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetClient ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:44 2023/8/15
|
||||
func (c *client) GetClient(flag string) *clientv3.Client {
|
||||
flagClient, _ := c.GetClientWithError(flag)
|
||||
return flagClient
|
||||
}
|
||||
|
||||
// GetClientWithError ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:44 2023/8/15
|
||||
func (c *client) GetClientWithError(flag string) (*clientv3.Client, error) {
|
||||
c.lock.RLock()
|
||||
defer c.lock.RUnlock()
|
||||
if _, exist := c.table[flag]; !exist {
|
||||
return nil, errors.New(flag + " client instance not found")
|
||||
}
|
||||
return c.table[flag], nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user