Expand description
NATS provider implementation using JetStream.
This module provides production-ready NATS integration via the async-nats client
with JetStream. It implements the QueueProvider and SessionProvider traits,
enabling NATS to be used as a drop-in backend in the queue-runtime abstraction layer.
§Key Features
- JetStream: Persistent, at-least-once message delivery with ack/nak semantics
- Pull consumers: Explicit message fetch with configurable ack-wait (visibility timeout analog)
- Dead letter support: Failed messages forwarded to a configurable DLQ stream
- Session emulation: Sessions emulated via per-session filter subjects within a shared stream
- Batch operations: Up to 100 messages per batch
§Stream and Subject Naming
The provider creates one JetStream stream per queue. Naming conventions:
- Stream name:
{stream_prefix}-{queue_name}(hyphens replace underscores for NATS compatibility) - Subject:
{stream_prefix}.{queue_name} - Session subject:
{stream_prefix}.{queue_name}.session.{session_id}
§Dead Letter Support
When enable_dead_letter is true and dead_letter_subject_prefix is set,
messages dead-lettered via [dead_letter_message] are published to
{prefix}.{queue_name} using a separate JetStream stream for DLQ messages.
§Session Support
Sessions are emulated via JetStream subject filtering. Each session gets its own
subject ({prefix}.{queue}.session.{session_id}), and a NatsSessionProvider
creates a per-session pull consumer filtered to that subject.
§Connection
The provider uses the async-nats client which reconnects automatically on
connection loss. Optional NATS credentials can be loaded from a .creds file
via the credentials_path configuration field.
§Testing
use queue_runtime::providers::NatsProvider;
use queue_runtime::NatsConfig;
let config = NatsConfig {
url: "nats://localhost:4222".to_string(),
..NatsConfig::default()
};
let provider = NatsProvider::new(config).await.unwrap();Structs§
- Nats
Config - NATS provider configuration using JetStream
- Nats
Error - NATS-specific error type.
- Nats
Provider - NATS queue provider using JetStream for persistent, at-least-once delivery.
- Nats
Session Provider - Session provider for NATS using a per-session JetStream pull consumer.