原文地址:etcd/clientv3

etcd/clientv3是v3版本的Go etcd官方客户端

安装


go get go.etcd.io/etcd/clientv3

开始


创建客户端使用clientv3.New:

cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
// handle error!
}
defer cli.Close()

etcd v3使用gRPC进行远程程序调用,并且clientv3使用grpc-go连接etcd。确保在使用完客户端后关闭它,如果客户端没有关闭,连接将会有泄漏的goroutines。指定超时时间,通过context.WithTimeout使用APIs:

ctx, cancel := context.WithTimeout(context.Background(), timeout)
resp, err := cli.Put(ctx, "sample_key", "sample_value")
cancel()
if err != nil {
// handle error!
}
// use the response

为了完全兼容,建议使用etcd's中的vendored包进行构建,使用工具像golang/dep,在vendor目录内。

错误处理

etcd客户端返回两种类型的错误:

  1. context error :canceled or deadline exceeded.
  2. gRpc error : 看api/v3rpc/rpctypes.

这里有例子处理客户端错误:

resp, err := cli.Put(ctx, "", "")
if err != nil {
switch err {
case context.Canceled:
log.Fatalf("ctx is canceled by another routine: %v", err)
case context.DeadlineExceeded:
log.Fatalf("ctx is attached with a deadline is exceeded: %v", err)
case rpctypes.ErrEmptyKey:
log.Fatalf("client-side error: %v", err)
default:
log.Fatalf("bad cluster endpoints, which are not etcd servers: %v", err)
}
}

监控

etcd客户端可以通过go-grpc-prometheus,选择RPC监控指标,看例子

命名空间

namespace包提供clientv3接口封装透明隔离客户端请求到用户定义的前缀。

请求大小限制

客户端请求大小限制通过clientv3.Config.MaxCallSendMsgSizeMaxCallRecvMsgSize进行配置。如果没有给予值,客户端请求发送限制包括gRPC负载默认2MB。接收限制默认为math.MaxInt32

例子

更多代码例子可以从GoDoc发现。

最新文章

  1. js取当前周几
  2. Android 照相 滤镜
  3. java 导出数据为word文档(保持模板格式)
  4. DEDE有无缩略图如何调取
  5. 透过proxy进行docker pull(Centos6.8)
  6. storm环境搭建(前言)—— 翻译 Setting Up a Development Environment
  7. Oracle Exception 处理
  8. 简单地使用jquery的validate
  9. iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验
  10. 栅栏cyclicbarrier
  11. C++中的继承详解(3)作用域与重定义,赋值兼容规则
  12. guava cache使用和源码分析
  13. 新手级配置 react react-router4.0 redux fetch sass
  14. 【Vegas原创】VirtualBox扩容、分割的整体方案
  15. Python全栈学习_day007作业
  16. 模拟开户接口,使用python脚本实现批量用户开通
  17. ABP-Zero模块
  18. mysql导入sql脚本
  19. Python读写txt文本文件
  20. 如何学习C++? C++ Primer第三版中文版

热门文章

  1. maven中的setting文件
  2. docker镜像、docker容器导入导出命令
  3. Numpy的基础用法
  4. [leetcode] H-Index (Hash Table)
  5. 洛谷 题解 P3161 【[CQOI2012]模拟工厂】
  6. SpringBoot入门简介(一)
  7. luogu P1908 逆序对 |树状数组
  8. iOS App Extension入门
  9. Java修炼——接口详解_接口的特征_使用接口的意义
  10. SpringBoot中JdbcTemplate