nats-aflowt

Crates.ionats-aflowt
lib.rsnats-aflowt
version0.16.105
sourcesrc
created_at2022-01-08 22:31:48.573255
updated_at2022-02-14 17:32:40.484504
descriptionUnofficial port of NATS rust client to pure async
homepagehttps://github.com/stevelr/nats.rs
repositoryhttps://github.com/stevelr/nats.rs
max_upload_size
id510571
size581,632
(stevelr)

documentation

https://docs.rs/nats-aflowt

README

Experimental port of rust NATS client to rust async

Don't get blocked by asynk - stay aflowt

The nats::asynk module is an async veneer over blocking io and consumes a thread-per-connection, and, depending on how you use subscriptions, an additional thread per subscription handler. This package uses real async throughout the client. All connections and subscriptions are non-blocking and may safely share the same thread, or, optionally, a thread pool.

This package is not endorsed by the Nats team. I wrote it as an experiment after running into some limitations with ratsio, another nats async client.

:loudspeaker: Warning

:warning: This should only be used in environments where software is expected to hang, consume all CPU, destroy data, and explode at random intervals.

Status (Jan 8, 2022)

  • Feature parity with rust nats client (including jetstream, tls, etc.) as of commit d22329c (main branch, jan 7, 2022)

  • Tested on linux x86_64. All tests pass except for two: (jetstream:kv and jetstream:object_store), which are currently disabled by a feature flag.

  • apis are subject to change

Changes from nats.rs

  • can run all async tasks in a single thread (subscriptions and connections do not spawn new threads)

  • in the port to async, many apis have changed:

    • most public functions have been changed to be async
    • all functions that used to return an Iterator now return futures::Stream
    • wherever there was an explicit iter(..) method to create an iterator, it's been replaced with stream(..).
    • jetstream PagedIterator replaced with Stream
    • error callbacks must now implement a trait, instead of being a simple closure. See doc comments and examples folder for examples.
    • added Subscription.with_async_handler to take async closure
      • (Subscription.with_handler still takes sync closure)
  • jetstream kv and object_store functions are enabled in this crate in the default feature set to support testing. (In nats.rs they are behind an "unstable" feature flag and should be considered unstable here).

  • some tests have been added

  • upgraded to rust 2021 edition

This crate currently depends on the tokio runtime. I suspect if the Nats team does develop a pure async rust client, they will attempt to make it runtime agnostic.

Commit count: 881

cargo fmt