@qified/nats

NATS message provider for Qified.

This package implements a message provider backed by NATS using the publish/subscribe operations. A special thanks to Santosh Bandichode for creating this package!

Table of Contents

Installation

pnpm add @qified/nats

Usage with Qified

import { createQified } from "@qified/nats";
import type { Message } from "qified";

const qified = createQified({ uri: "localhost:4222" });

await qified.subscribe("example-topic", {
        async handler(message: Message) {
                console.log(message);
        },
});

await qified.publish("example-topic", { id: "1", data: "Hello from NATS!" });

await qified.disconnect();

API

NatsMessageProviderOptions

Configuration options for the NATS message provider.

defaultNatsUri

Default NATS connection string ("localhost:4222").

NatsMessageProvider

Implements the MessageProvider interface using NATS publish/subscribe.

constructor(options?: NatsMessageProviderOptions)

Creates a new provider.

Options:

  • uri: NATS connection URI (defaults to "localhost:4222").

publish(topic: string, message: Message)

Publishes a message to a topic.

subscribe(topic: string, handler: TopicHandler)

Subscribes a handler to a topic.

unsubscribe(topic: string, id?: string)

Unsubscribes a handler by id or all handlers for a topic.

disconnect()

Disconnects from the NATS server and clears all subscriptions.

createQified(options?: NatsMessageProviderOptions)

Convenience factory that returns a Qified instance configured with NatsMessageProvider.

Draining Messages

NATS allows processing in-flight messages before unsubscribing/disconnecting. If this is needed, override unsubscribe and/or disconnect methods and call drain instead of unsubscribe/close.

public async unsubscribe(topic: string, id?: string): Promise<void> {
    // ...
    await this._subscriptions.get(topic)?.drain();
    // ...
}
public async disconnect(): Promise<void> {
    // ...
    await this._connection?.drain();
    // ...
}

Please read NATS Pub/Sub to know about message draining.

Contributing

Contributions are welcome! Please read the CONTRIBUTING.md and CODE_OF_CONDUCT.md for details on our process.

License

MIT © Jared Wray. See LICENSE for details.