1 个不稳定版本

0.2.0 2023 年 12 月 18 日

#35 in #distributed-applications


2 crates 中使用

Apache-2.0

320KB
7K SLoC

Latest Version Rust Documentation

AX SDK

AX 是一个去中心化的事件数据库,流式处理引擎,允许您轻松构建 本地优先合作 应用程序。它使得在多个节点上运行分布式应用程序变得容易。这是一款软件,允许您在自己的一个或多个边缘设备上运行应用程序,并且这些应用程序可以无缝地相互通信和共享数据。


注意: AX 是由公司 Actyx AG 创建的,早于无关的 Actix 框架(尽管 AX 直到 23 年 10 月才开源)。虽然我们已经更改了 crate 名称以避免混淆,但公司名称仍然是 Actyx AG,并出现在某些位置。


此 crate 定义了与 Actyx 通信所需的数据类型,并为 AX API 提供了 Rust 绑定。

示例

以下是一个使用 Ax 客户端检索一些事件的完整示例。请根据存储的事件调整查询的标签,以便查看输出。

use ax_sdk::{
  Ax, AxOpts,
  types::{
    app_id, AppManifest,
    service::{Order, QueryRequest, QueryResponse},
  }
};
use futures::stream::StreamExt;
use url::Url;

#[tokio::main]
pub async fn main() -> anyhow::Result<()> {
  // Add your app manifest, for brevity we will use one in trial mode
  let manifest = AppManifest::trial(
      app_id!("com.example.my-awesome-app"),
      "display name".into(),
      "0.1.0".into(),
  ).unwrap();

  // Url of the locally running Actyx node
  let url = Url::parse("https://127.0.0.1:4454")?;

  // Create client for it
  let service = Ax::new(AxOpts { url, manifest }).await?;

  // all events matching the given subscription
  // sorted backwards, i.e. youngest to oldest
  let mut events = service
      .query("FROM 'MyTag'")
      .with_order(Order::Desc)
      .await?;

  // print out the payload of each event
  // (cf. `Payload::extract` for more options)
  while let Some(QueryResponse::Event(event)) = events.next().await {
      println!("{}", event.payload.json_value());
  }
  Ok(())
}

功能标志

依赖项

~16–29MB
~465K SLoC