3 releases
0.1.2 | Jul 31, 2024 |
---|---|
0.1.1 | Jul 23, 2024 |
0.1.0 | Jul 23, 2024 |
#501 in Asynchronous
158 downloads per month
34KB
767 lines
Zookeeper-cache-rust
Zookeeper-cache-rust is a asynchronous, pure rust implementation of ZooKeeper client cache, which provides a easy to watch the nodes' status of zookeeper.
Usage
cargo add zookeeper-cache
Example
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")));
}
Reference
Use zookeeper-client-rust to connect ZooKeeper
License
Dependencies
~16–26MB
~453K SLoC