Publish With Routing Keys¶
Routing keys allow messages to be routed selectively.
They are mainly used with:
- direct exchanges;
- topic exchanges.
Direct Routing¶
A direct exchange routes messages when the routing key matches exactly.
graph LR
Publisher --> Exchange["orders"]
Exchange -->|"orders.created"| Created["orders.created.queue"]
Exchange -->|"orders.updated"| Updated["orders.updated.queue"]
var descriptor = new PublisherBoundDescriptor
{
Exchanges =
{
new ExchangeBoundDescriptor
{
Name = "orders",
Type = ExchangeTypes.Direct,
Durable = true,
Queues =
{
new QueueBoundDescriptor
{
Name = "orders.created.queue",
Durable = true,
AutoDelete = false,
Binder = new BinderDescriptor
{
RoutingKey = "orders.created"
}
},
new QueueBoundDescriptor
{
Name = "orders.updated.queue",
Durable = true,
AutoDelete = false,
Binder = new BinderDescriptor
{
RoutingKey = "orders.updated"
}
}
}
}
}
};
Topic Routing¶
A topic exchange routes messages using wildcard patterns.
graph TD
Message["orders.eu.created"]
Message --> EU["orders.eu.*"]
Message --> AllOrders["orders.#"]
var descriptor = new PublisherBoundDescriptor
{
Exchanges =
{
new ExchangeBoundDescriptor
{
Name = "orders",
Type = ExchangeTypes.Topic,
Durable = true,
Queues =
{
new QueueBoundDescriptor
{
Name = "orders.eu.queue",
Durable = true,
AutoDelete = false,
Binder = new BinderDescriptor
{
RoutingKey = "orders.eu.*"
}
},
new QueueBoundDescriptor
{
Name = "orders.all.queue",
Durable = true,
AutoDelete = false,
Binder = new BinderDescriptor
{
RoutingKey = "orders.#"
}
}
}
}
}
};
Routing Key Naming¶
Prefer meaningful routing keys.
orders.created
orders.updated
payments.authorized
payments.completed
For topic exchanges, prefer hierarchical names.
orders.eu.created
orders.eu.updated
orders.us.created
orders.us.updated
Avoid¶
event1
event2
test
message
Routing keys should express business intent.