Skip to content

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
  • 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

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.