#zookeeper #cache #node #root-node #async #client

zookeeper-cache-rust

ZooKeeper 客户端缓存

1 个不稳定版本

0.1.0 2024 年 7 月 23 日

#577异步

Download history 111/week @ 2024-07-21 15/week @ 2024-07-28

每月 126 次下载

MIT 许可证

33KB
761

Zookeeper-cache-rust

mit-license

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")));
}

许可证

FOSSA Status

依赖项

~16–26MB
~454K SLoC