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 #客户端连接
每月下载量 292次
710KB
16K SLoC
NakadiOn!
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