1 个不稳定版本
0.1.0 | 2021年10月1日 |
---|
#11 在 #hashicorp
每月下载量 161
在 2 个crate中使用(通过 consulrs)
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适用)。
贡献
查看问题以了解需要关注的项目或提交您自己的问题,然后
- 复制仓库(https://github.com/jmgilman/consulrs/fork)
- 创建您的功能分支(git checkout -b feature/fooBar)
- 提交您的更改(git commit -am '添加一些fooBar')
- 推送到分支(git push origin feature/fooBar)
- 创建一个新的Pull Request
依赖关系
~1.5MB
~38K SLoC