async-nats 0.9.1

An async Rust NATS client
Documentation

An async Rust client for the NATS.io ecosystem.

git clone https://github.com/nats-io/nats.rs

NATS.io is a simple, secure and high performance open source messaging system for cloud native applications, IoT messaging, and microservices architectures.

For more information see https://nats.io/.

Examples

Basic connections, and those with options. The compiler will force these to be correct.

# smol::block_on(async {
let nc = async_nats::connect("demo.nats.io").await?;

let nc2 = async_nats::Options::with_user_pass("derek", "s3cr3t!")
.with_name("My Rust NATS App")
.connect("127.0.0.1")
.await?;

let nc3 = async_nats::Options::with_credentials("path/to/my.creds")
.connect("connect.ngs.global")
.await?;

let nc4 = async_nats::Options::new()
.add_root_certificate("my-certs.pem")
.connect("tls://demo.nats.io:4443")
.await?;
# std::io::Result::Ok(()) });

Publish

# smol::block_on(async {
let nc = async_nats::connect("demo.nats.io").await?;
nc.publish("my.subject", "Hello World!").await?;

nc.publish("my.subject", "my message").await?;

// Publish a request manually.
let reply = nc.new_inbox();
let rsub = nc.subscribe(&reply).await?;
nc.publish_request("my.subject", &reply, "Help me!").await?;
# std::io::Result::Ok(()) });

Subscribe

# smol::block_on(async {
# use std::time::Duration;
let nc = async_nats::connect("demo.nats.io").await?;
let sub = nc.subscribe("foo").await?;

// Receive a message.
if let Some(msg) = sub.next().await {}

// Queue subscription.
let qsub = nc.queue_subscribe("foo", "my_group").await?;
# std::io::Result::Ok(()) });

Request/Response

# use std::time::Duration;
# smol::block_on(async {
let nc = async_nats::connect("demo.nats.io").await?;
let resp = nc.request("foo", "Help me?").await?;

// With multiple responses.
let rsub = nc.request_multi("foo", "Help").await?;
if let Some(msg) = rsub.next().await {}
if let Some(msg) = rsub.next().await {}

// Publish a request manually.
let reply = nc.new_inbox();
let rsub = nc.subscribe(&reply).await?;
nc.publish_request("foo", &reply, "Help me!").await?;
let response = rsub.next().await;
# std::io::Result::Ok(()) });