#consul #query #client #api #macro #hashi-corp #consulrs

consulrs_derive

用于实现Consul端点查询选项的 derive 宏

1 个不稳定版本

0.1.0 2021年10月1日

#11#hashicorp

Download history 117/week @ 2024-04-08 162/week @ 2024-04-15 136/week @ 2024-04-22 51/week @ 2024-04-29 137/week @ 2024-05-06 165/week @ 2024-05-13 173/week @ 2024-05-20 131/week @ 2024-05-27 204/week @ 2024-06-03 116/week @ 2024-06-10 82/week @ 2024-06-17 80/week @ 2024-06-24 46/week @ 2024-07-01 46/week @ 2024-07-08 22/week @ 2024-07-15 43/week @ 2024-07-22

每月下载量 161
2 个crate中使用(通过 consulrs

MIT 许可证

4KB
50

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();

// In most cases, it's easier to just read the raw value
let mykey = std::str::from_utf8(&kv::read_raw(&client, "mykey", None).unwrap()).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. 创建一个新的Pull Request

依赖关系

~1.5MB
~38K SLoC