15 个版本 (8 个破坏性更新)

0.9.0 2018年12月15日
0.8.0 2017年8月5日
0.7.0 2017年7月22日
0.5.5 2016年10月15日
0.1.0 2015年4月11日

#2507数据库接口

每月 47 次下载

MIT 许可证

105KB
2K SLoC

etcd

Build Status

一个为 Rust 编写的 etcd 客户端库。

  • etcd 在 crates.io
  • 文档 关于最新 crates.io 发布版本

运行测试

  • 安装 Docker 和 Docker Compose。
  • 运行 make. 这将使您进入容器中的 Bash shell。
  • 在容器内部,运行 cargo test.

许可证

MIT


lib.rs:

Crate etcdetcd 提供了一个客户端,这是一个来自 CoreOS 的分布式键值存储。

客户端使用 etcd 的 v2 API。v3 API 的支持计划中,将通过单独的类型添加,以支持向后兼容性和同时支持两个 API。

客户端使用异步 I/O,由 futurestokio Crate 支持,并需要同时使用它们。在可能的情况下,使用 "impl Trait" 而不是装箱返回 futures。

客户端针对 etcd 2.3.8 进行了测试。

用法

Client 是所有 API 调用所需的 HTTP 客户端。它可以构建为使用 HTTP 或 HTTPS,并支持通过 HTTP 基本身份验证(用户名和密码)以及/或 X.509 客户端证书对 etcd 集群进行身份验证。

要获取有关集群中运行的 etcd 健康和版本的基本信息,请分别使用 Client::healthClient::versions 方法。所有其他 API 调用都是通过将 Client 引用传递给 authkvmembersstats 模块中的函数来执行的。这些模块分别包含对认证和授权 API、主要键值存储 API、集群成员资格 API 和统计 API 的 API 调用函数。

示例

基本用法

use etcd::Client;
use etcd::kv::{self, Action};
use futures::Future;
use tokio::runtime::Runtime;

fn main() {
    // Create a client to access a single cluster member. Addresses of multiple cluster
    // members can be provided and the client will try each one in sequence until it
    // receives a successful response.
    let client = Client::new(&["http://etcd.example.com:2379"], None).unwrap();

    // Set the key "/foo" to the value "bar" with no expiration.
    let work = kv::set(&client, "/foo", "bar", None).and_then(move |_| {
        // Once the key has been set, ask for details about it.
        let get_request = kv::get(&client, "/foo", kv::GetOptions::default());

        get_request.and_then(|response| {
            // The information returned tells you what kind of operation was performed.
            assert_eq!(response.data.action, Action::Get);

            // The value of the key is what we set it to previously.
            assert_eq!(response.data.node.value, Some("bar".to_string()));

            // Each API call also returns information about the etcd cluster extracted from
            // HTTP response headers.
            assert!(response.cluster_info.etcd_index.is_some());

            Ok(())
        })
    });

    // Start the event loop, driving the asynchronous code to completion.
    assert!(Runtime::new().unwrap().block_on(work).is_ok());
}

Cargo 功能

Crate etcd 有一个 Cargo 功能,tls,它通过 Client::https 构造函数添加 HTTPS 支持。此功能默认启用。

依赖项

~9–19MB
~297K SLoC