zoukankan      html  css  js  c++  java
  • golang 中 etcd 基本用法

    介绍

    ETCD : 高可用的分布式key-value存储,可以用于配置共享和服务发现。
    类似项目:zookeeper和consul

    import (
    	"github.com/coreos/go-etcd/etcd"
    	"log"
    )
    
    var (
    	client *etcd.Client
    	machines = []string{"http://127.0.0.1:2379"}
    )
    
    // 在初始化方法中创建 etcd 客户端
    func init()  {
    	client = etcd.NewClient(machines)
    	log.Print("etcd client create success")
    }
    
    // 设置key值
    func SetKey(key,value string,ttl uint64) {
    	if nil == client {
    		log.Fatal("etcd client is nil")
    		return
    	}
    	if _, err := client.Set(key, value, ttl); err != nil {
    		log.Fatal(err)
    	}
    }
    
    // 获取key值
    func GetKey(key string)  {
    	if nil == client {
    		log.Fatal("etcd client is nil")
    		return
    	}
    	resp, err := client.Get(key, false, false)
    	if err != nil {
    		log.Fatal(err)
    	}
    	log.Printf("Current creds: %s: %s
    ", resp.Node.Key, resp.Node.Value)
    }
    
    // 监听key值的滨化
    func WatchKey(key string)  {
    	if nil == client {
    		log.Fatal("etcd client is nil")
    		return
    	}
    	receiver := make(chan *etcd.Response)
    	stopChan := make(chan bool)
    	go client.Watch(key,0,false,receiver,stopChan)
    	for  {
    		select {
    		case r := <-receiver:
    			if r.Node.Value == "stop"{
    				stopChan<- true
    				log.Println("get stop")
    				return
    			}
    			log.Printf("Got updated creds: %s: %s
    ", r.Node.Key, r.Node.Value)
    
    		}
    	}
    }
    
    func Close()  {
    	if nil != client {
    		client.Close()
    	}
    	log.Println("Stop")
    }
    
  • 相关阅读:
    关于一道PHP面试题的解法
    ThinkPHP学习(二)
    ThinkPHP学习(一)
    Apache 创建虚拟主机目录和设置默认访问页面
    awk全集
    初识云计算&openstack
    Python collections
    Python 函数/高阶函数
    Python dic/set/迭代
    python matplotlib 图标绘制
  • 原文地址:https://www.cnblogs.com/pmsl/p/9621529.html
Copyright © 2011-2022 走看看