Crates.io | zookeeper-cache |
lib.rs | zookeeper-cache |
version | 0.1.2 |
source | src |
created_at | 2024-07-23 11:02:15.435004 |
updated_at | 2024-07-31 12:13:56.553938 |
description | ZooKeeper client cache |
homepage | https://github.com/misssonder/zookeeper-cache-rust |
repository | https://github.com/misssonder/zookeeper-cache-rust |
max_upload_size | |
id | 1312659 |
size | 45,004 |
Zookeeper-cache-rust is a asynchronous, pure rust implementation of ZooKeeper client cache, which provides a easy to watch the nodes' status of zookeeper.
cargo add zookeeper-cache
Cache will watch root node and it's children nodes recursively.
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(())
}
When a cache be created, it will return a Stream also, the item of the stream is Event. There three event types which instead of the data created, data updated, data deleted.
#[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")));
}
Use zookeeper-client-rust to connect ZooKeeper