Table of Contents

Publish-Subscribe Pattern

NATS implements a publish-subscribe message distribution model for one-to-many communication. A publisher sends a message on a subject and any active subscriber listening on that subject receives the message.

await using var nc = new NatsClient();

var subscription = Task.Run(async () =>
{
    await foreach (var msg in nc.SubscribeAsync<int>("foo"))
    {
        Console.WriteLine($"Received {msg.Subject}: {msg.Data}\n");

        if (msg.Data == -1)
            break;
    }
});

// Give subscription time to start
await Task.Delay(1000);

for (var i = 0; i < 10; i++)
{
    Console.WriteLine($" Publishing {i}...");
    await nc.PublishAsync<int>("foo", i);
}

// Signal subscription to stop
await nc.PublishAsync<int>("foo", -1);

// Make sure subscription completes cleanly
await subscription;

You can run multiple subscribers to the same subject, and each subscriber will receive a copy of the message. At the same time, you can have multiple publishers sending messages to the same subject. This is a powerful feature of NATS that enables many messaging patterns.