1 个不稳定版本

0.1.0 2021 年 10 月 1 日

#8#consul

Download history 136/week @ 2024-03-15 128/week @ 2024-03-22 140/week @ 2024-03-29 131/week @ 2024-04-05 153/week @ 2024-04-12 121/week @ 2024-04-19 75/week @ 2024-04-26 136/week @ 2024-05-03 147/week @ 2024-05-10 157/week @ 2024-05-17 136/week @ 2024-05-24 196/week @ 2024-05-31 115/week @ 2024-06-07 97/week @ 2024-06-14 57/week @ 2024-06-21 35/week @ 2024-06-28

336 每月下载量
用于 consul-patch-json

MIT 许可证

105KB
2K SLoC

consulrs

HashiCorp Consul API 的异步 Rust 客户端库

以下功能目前支持

此外,还支持所有可选的 API 功能,如一致性模式、阻塞等。

安装

consulrs 添加为 cargo.toml 中的依赖项

[dependencies]
consulrs = "0.1.0"

用法

基本用法

客户端用于配置与 Consul 的连接,并且必须传递给所有 API 调用来执行。在幕后,它使用来自 Reqwest 的异步客户端与 Consul 进行通信。

use consulrs::client::{ConsulClient, ConsulClientSettingsBuilder};

// Create a client
let client = ConsulClient::new(
    ConsulClientSettingsBuilder::default()
        .address("https://127.0.0.1:8200")
        .build()
        .unwrap()
).unwrap();

客户端支持与生产级 Consul 服务交互所需的所有功能,包括指定 ACL 令牌以及客户端和 CA 证书的选项。

使用 KV 存储

use std::convert::TryInto;
use consulrs::kv;

// Set `mykey` to "myvalue"
kv::set(&client, "mykey", b"myvalue", None).await;

// Read `mykey`
let mut res = kv::read(&client, "mykey", None).await.unwrap();

// All responses are base64 encoded by default. The below attempts to coerce
// the response back into a UTF-8 encoded string.
let mykey: String = res.response.pop().unwrap().value.unwrap().try_into().unwrap();

assert_eq!(mykey, "myvalue".to_string());

注册服务

use consulrs::api::check::common::AgentServiceCheckBuilder;
use consulrs::api::service::requests::RegisterServiceRequest
use consulrs::service;

// Create a service named "my_service" with a health check that queries the
// service via HTTP every 10 seconds.
service::register(
    &client,
    "my_service",
    Some(
        RegisterServiceRequest::builder()
            .address("http://myservice.lab.com")
            .port(1234)
            .check(
                AgentServiceCheckBuilder::default()
                    .name("health_check")
                    .interval("10s")
                    .http("http://myservice.lab.com/health")
                    .status("passing")
                    .build()
                    .unwrap(),
            ),
    ),
)
.await;

有关更多示例,请参阅 示例目录

错误处理和跟踪

此crate生成的所有错误都包含在crate提供的ClientError枚举中。API错误被捕获并作为自己的变体返回,包括来自服务器的响应代码和错误消息。来自rustify的与连接相关错误被包装并作为一个单独的变体返回。

所有顶级API操作都使用tracing#[instrument]属性进行跟踪。

测试

有关测试,请参阅 测试目录。使用cargo test运行测试。

注意:所有测试都需要使用Docker启动本地Consul开发服务器。为了运行测试,Docker必须在本地运行(Docker Desktop可行)。

贡献

查看需要关注的问题或提交您自己的问题,然后

  1. 分支仓库(https://github.com/jmgilman/consulrs/fork
  2. 创建您的功能分支(git checkout -b feature/fooBar)
  3. 提交您的更改(git commit -am '添加一些fooBar')
  4. 推送到分支(git push origin feature/fooBar)
  5. 创建新的拉取请求

依赖项

~8–26MB
~390K SLoC