#zookeeper #cache #root-node #events #tokio

zookeeper-cache

ZooKeeper客户端缓存

3个版本

0.1.2 2024年7月31日
0.1.1 2024年7月23日
0.1.0 2024年7月23日

#274 in 异步

Download history 213/week @ 2024-07-21 174/week @ 2024-07-28 3/week @ 2024-08-04

每月390次下载

MIT许可证

34KB
767

Zookeeper-cache-rust

crates.io docs.rs mit-license

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

许可证

FOSSA Status

依赖项

~17–27MB
~471K SLoC