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
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