140个版本

0.30.0 2021年11月4日
0.29.2 2021年6月14日
0.29.1 2021年3月29日
0.28.15 2020年12月10日
0.3.4 2017年4月24日

#10 in #客户端连接

Download history 1/week @ 2024-03-14 333/week @ 2024-03-28 170/week @ 2024-04-04

每月下载量 292次

Apache-2.0/MIT

710KB
16K SLoC

NakadiOn!

CI

Nakadi事件代理的客户端。

摘要

Nakadion 是一个连接到 Nakadi 订阅 API 的客户端。它负责所有游标管理,以便用户可以集中精力实现他们的事件处理逻辑。用户实现的事件处理代码不会接触到 Nakadi 的内部。

Nakadion 几乎可以通过环境变量进行完全配置。

请先查看 Nakadi 的文档,以便熟悉 Nakadi 的概念。

目前 Nakadion 仅与 tokio 运行时一起工作。未来可能会添加其他执行环境。

如何使用

要运行此示例,需要设置以下环境变量

  • NAKADION_NAKADI_BASE_URL
  • NAKADION_SUBSCRIPTION_ID
  • NAKADION_ACCESS_TOKEN_FIXED 使用有效令牌或 NAKADION_ACCESS_TOKEN_ALLOW_NONE=true
use nakadion::api::ApiClient;
use nakadion::consumer::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = ApiClient::default_builder().finish_from_env()?;

    let consumer = Consumer::builder_from_env()?.build_with(
        client,
        handler::MyHandlerFactory,
        StdOutLogger::default(),
    )?;

    let (_handle, consuming) = consumer.start();

    let _ = consuming.await.into_result()?;

    Ok(())
}

mod handler {
    use futures::future::{BoxFuture, FutureExt};

    use nakadion::handler::*;

    pub struct MyHandler {
        events_received: usize,
    }

    impl EventsHandler for MyHandler {
        type Event = serde_json::Value;
        fn handle<'a>(
            &'a mut self,
            events: Vec<Self::Event>,
            _meta: BatchMeta<'a>,
        ) -> EventsHandlerFuture {
            async move {
                self.events_received += events.len();
                EventsPostAction::Commit
            }
            .boxed()
        }
    }

    pub struct MyHandlerFactory;

    impl BatchHandlerFactory for MyHandlerFactory {
        fn handler(
            &self,
            _assignment: &HandlerAssignment,
        ) -> BoxFuture<Result<Box<dyn BatchHandler>, Error>> {
            async { Ok(Box::new(MyHandler { events_received: 0 }) as Box<_>) }.boxed()
        }
    }
}

性能

Nakadion 不适用于高性能场景。它使用异步IO。尽管如此,根据您的处理逻辑的复杂性,每秒处理数万事件是可能的。

近期更改

查看 CHANGELOG

许可证

Nakadion 在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。

有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。

许可证: Apache-2.0/MIT

依赖关系

~8–21MB
~320K SLoC