#nats-client #async-client #nats #async-api #client #async #messaging

nats-aflowt

非官方将 NATS Rust 客户端移植为纯异步版本

5 个版本

0.16.105 2022年2月14日
0.16.104 2022年2月7日
0.16.103 2022年1月11日
0.16.102 2022年1月10日
0.16.101 2022年1月8日

#17 in #nats-client

Apache-2.0

380KB
6.5K SLoC

将 rust NATS 客户端实验性移植到 rust async

不要被 asynk 堵塞 - 保持 aflowt

nats::asynk 模块是对阻塞 I/O 的异步封装,每个连接消耗一个线程,并且根据订阅的使用情况,每个订阅处理程序可能还需要一个额外的线程。此包在整个客户端中使用真正的异步。所有连接和订阅都是非阻塞的,可以安全地在同一线程中共享,或者可选地,在线程池中。

此包未经 NATS 团队认可。我在遇到另一个 NATS 异步客户端(ratsio)的一些限制后编写了它,作为实验。

📢 警告

⚠️ 这应在预期软件会挂起、消耗所有 CPU、破坏数据或在随机间隔内爆炸的环境中使用。

状态(2022年1月8日)

  • 截至提交 d22329c(main 分支,2022年1月7日),与 rust nats 客户端(包括 jetstream、tls 等)具有功能一致性

  • 在 linux x86_64 上进行了测试。所有测试都通过,除了两个测试:(jetstream:kv 和 jetstream:object_store),它们目前被功能标志禁用。

  • API 可能会更改

从 nats.rs 的更改

  • 可以在单个线程中运行所有异步任务(订阅和连接不会创建新线程)
  • 在移植到异步时,许多 API 都已更改
    • 大多数公共函数都已更改为 async
    • 所有以前返回 Iterator 的函数现在返回 futures::Stream
    • 无论何时有显式的 iter(..) 方法来创建迭代器,都已用 stream(..) 替换。
    • Stream 替换 PagedIterator
    • 错误回调现在必须实现一个特质,而不是简单的闭包。请参阅文档注释和示例文件夹中的示例。
    • 添加了 Subscription.with_async_handler 以接受异步闭包
      • (Subscription.with_handler 仍然接受同步闭包)
  • 在本crate中默认功能集已启用jetstream kv和object_store函数以支持测试。(在nats.rs中,它们位于"unstable"功能标志之后,应在此视为不稳定)。
  • 已添加一些测试。
  • 升级到Rust 2021版。

此crate目前依赖于tokio运行时。我怀疑如果Nats团队开发一个纯异步Rust客户端,他们将会尝试使其与运行时不相关。

依赖项

~20–34MB
~635K SLoC