consul api基本操作总结

23 篇文章 0 订阅
kv操作
package main

import (
	"log"

	"github.com/hashicorp/consul/api"
)

func main() {
	// config := api.DefaultConfig()
	config := api.DefaultNonPooledConfig() //DefaultNonPooledConfig
	config.Address = "xxx.xxx.xxx.xxx:8500"

	client, err := api.NewClient(config)
	if err != nil {
		log.Fatal(err)
	}

	//初始化一个kv
	pair := &api.KVPair{
		Key:   "key-1",
		Value: []byte("10"),
	}

	//创建一个KV
	kv := client.KV()
	if _, err := kv.Put(pair, nil); err != nil {
		log.Fatal(err)
	}

	//查询一个KV
	if p, _, err := kv.Get(pair.Key, nil); err != nil {
		log.Fatal(err)
	} else {
		log.Println(p.Key, "=>", string(p.Value))
	}

	//查询以 "key-1" 开头的K
	if ps, _, err := kv.List(pair.Key, nil); err != nil {
		log.Fatal(err)
	} else {
		for _, p := range ps {
			log.Println(p.Key, "=>", string(p.Value))
		}
	}

	//查询以 "key-1/" 开头的K
	if ks, _, err := kv.Keys(pair.Key, "/", nil); err != nil {
		log.Fatal(err)
	} else {
		for _, k := range ks {
			log.Println(k)
		}
	}

	//删除kv
	if _, err := kv.Delete(pair.Key, nil); err != nil {
		log.Fatal(err)
	} else {
		log.Println("delete key '", pair.Key, "' successfully")
	}
}


分布式锁
package main

import (
	"fmt"
	"log"
	"sync"
	"time"

	"github.com/hashicorp/consul/api"
)

var n int

//consul实现分布式锁
func print(wg *sync.WaitGroup, char string) {
	defer wg.Done()

	config := api.DefaultConfig()
	config.Address = "xxx.xxx.xxx.xxx:8500"

	client, err := api.NewClient(config)
	lock, err := client.LockKey("lockthis")
	if err != nil {
		log.Fatal(err)
	}

	for {
		_, err := lock.Lock(nil)
		if err != nil {
			log.Fatal(err)
		}

		if n >= 20 {
			if err := lock.Unlock(); err != nil {
				log.Fatal(err)
			}
			break
		}
		n++

		fmt.Printf("%s -> %d\n", char, n)
		time.Sleep(1 * time.Second)

		if err := lock.Unlock(); err != nil {
			log.Fatal(err)
		}
	}
}

func main() {
	wg := &sync.WaitGroup{}
	wg.Add(2)

	go print(wg, "A")
	go print(wg, "B")

	wg.Wait()
	fmt.Println("Done")
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值