Skip to content

Basic Publishing Topologies

This page shows the most common publisher topologies using PublisherBoundDescriptor.

The examples focus on descriptor configuration.


Publish To A Single Exchange

graph LR
    Publisher --> Exchange["orders"]
var descriptor = new PublisherBoundDescriptor
{
    Exchanges =
    {
        new ExchangeBoundDescriptor
        {
            Name = "orders",
            Type = ExchangeTypes.Direct,
            Durable = true
        }
    }
};

Publish To A Single Queue

graph LR
    Publisher --> Exchange["orders"]
    Exchange --> Queue["orders.created"]
var descriptor = new PublisherBoundDescriptor
{
    Exchanges =
    {
        new ExchangeBoundDescriptor
        {
            Name = "orders",
            Type = ExchangeTypes.Direct,
            Durable = true,
            Queues =
            {
                new QueueBoundDescriptor
                {
                    Name = "orders.created",
                    Durable = true,
                    AutoDelete = false
                }
            }
        }
    }
};

Publish To Multiple Queues

graph LR
    Publisher --> Exchange["orders"]
    Exchange --> ERP["erp.orders"]
    Exchange --> CRM["crm.orders"]
    Exchange --> Audit["audit.orders"]
var descriptor = new PublisherBoundDescriptor
{
    Exchanges =
    {
        new ExchangeBoundDescriptor
        {
            Name = "orders",
            Type = ExchangeTypes.Direct,
            Durable = true,
            Queues =
            {
                new QueueBoundDescriptor
                {
                    Name = "erp.orders",
                    Durable = true,
                    AutoDelete = false
                },
                new QueueBoundDescriptor
                {
                    Name = "crm.orders",
                    Durable = true,
                    AutoDelete = false
                },
                new QueueBoundDescriptor
                {
                    Name = "audit.orders",
                    Durable = true,
                    AutoDelete = false
                }
            }
        }
    }
};

Send Message

await publisher.SendAsync(new OrderCreated
{
    OrderId = Guid.NewGuid(),
    CreatedAtUtc = DateTime.UtcNow
});

When To Use

Use these topologies when:

  • the publisher owns a simple exchange topology;
  • one message must be routed to one or more queues;
  • the topology can be described directly from configuration;
  • routing logic should not be hardcoded in application code.