1 个不稳定版本
0.1.0 | 2024 年 7 月 23 日 |
---|
#577 在 异步
每月 126 次下载
33KB
761 行
Zookeeper-cache-rust
Zookeeper-cache-rust 是 ZooKeeper 客户端缓存的异步、纯 Rust 实现,它提供了一种易于观察 ZooKeeper 节点状态的方法。
示例
缓存将递归地监视根节点及其子节点。
use futures::StreamExt;
use zookeeper_cache_rust::CacheBuilder;
#[tokio::main]
async fn main() -> zookeeper_cache_rust::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")));
}
许可证
依赖项
~16–26MB
~454K SLoC