Skip to main content

Module nats

Module nats 

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

NatsConfig
NATS provider configuration using JetStream
NatsError
NATS-specific error type.
NatsProvider
NATS queue provider using JetStream for persistent, at-least-once delivery.
NatsSessionProvider
Session provider for NATS using a per-session JetStream pull consumer.