Routing Key Patterns¶
Routing keys determine how messages are routed through RabbitMQ exchanges.
A well-designed routing strategy simplifies maintenance and improves scalability.
Direct Routing¶
Direct exchanges require an exact routing key match.
graph LR
Message["orders.created"]
Exchange -->|"orders.created"| Queue
Example¶
orders.created
orders.updated
orders.deleted
Recommended Usage¶
- exact routing
- command messages
- deterministic delivery
Topic Routing¶
Topic exchanges support wildcard-based routing.
graph TD
Message["orders.eu.created"]
Message --> QueueA["orders.eu.*"]
Message --> QueueB["orders.#"]
Hierarchical Structure¶
A common convention is:
domain.region.event
Example:
orders.eu.created
orders.eu.updated
orders.us.created
orders.us.updated
Wildcards¶
Single Token¶
orders.eu.*
Matches:
orders.eu.created
orders.eu.updated
Does not match:
orders.eu.customer.created
Multiple Tokens¶
orders.#
Matches:
orders.created
orders.eu.created
orders.eu.customer.created
Fanout Routing¶
Fanout exchanges ignore routing keys entirely.
graph TD
Exchange --> QueueA
Exchange --> QueueB
Exchange --> QueueC
All bound queues receive the message.
Naming Conventions¶
Recommended¶
orders.created
orders.updated
customers.created
customers.updated
payments.authorized
payments.completed
Avoid¶
event1
event2
test
message
Routing keys should clearly communicate business meaning.
Environment Isolation¶
Routing keys can also encode environment information.
dev.orders.created
qa.orders.created
prod.orders.created
However, in most scenarios dedicated exchanges are preferred over environment-specific routing keys.