3个版本
0.1.2 | 2024年7月31日 |
---|---|
0.1.1 | 2024年7月23日 |
0.1.0 | 2024年7月23日 |
#274 in 异步
每月390次下载
34KB
767 行
Zookeeper-cache-rust
Zookeeper-cache-rust是一个异步、纯Rust实现的ZooKeeper客户端缓存,它提供了一种易于观察ZooKeeper节点状态的方法。
使用方法
cargo add zookeeper-cache
示例
缓存将递归地监视根节点及其子节点。
use futures::StreamExt;
use zookeeper_cache::CacheBuilder;
#[tokio::main]
async fn main() -> zookeeper_cache::Result<()> {
let (cache, mut stream) = CacheBuilder::default().build("localhost:2181").await?;
tokio::spawn(async move {
while let Some(event) = stream.next().await {
// handle event
println!("get event: {:?}", event);
}
});
cache.get("/test").await;
Ok(())
}
当创建缓存时,它还将返回一个Stream,该流的项目是Event。有三种事件类型,分别对应于数据的创建、更新和删除。
#[tokio::main]
async fn main() {
let url = String::from("localhost:2181");
let (cache, mut stream) = CacheBuilder::new("/test").build(&url).await.unwrap();
let client = server.client().await.unwrap();
client.create("/test", &[], PERSISTENT_OPEN).await.unwrap();
let event = stream.next().await.unwrap();
assert!(matches!(event, Event::Add(data) if data.path.eq("/test")));
assert!(cache.get("/test").await.is_some());
client.set_data("/test", &[1], None).await.unwrap();
let event = stream.next().await.unwrap();
assert!(matches!(event, Event::Update{old,..} if old.path.eq("/test")));
client.delete("/test", None).await.unwrap();
let event = stream.next().await.unwrap();
assert!(matches!(event, Event::Delete(data) if data.path.eq("/test")));
}
参考
使用zookeeper-client-rust连接ZooKeeper
许可证
依赖项
~17–27MB
~471K SLoC