When we began using RabbitMQ almost three years ago, we initially tried to have "strong" naming conventions which would clearly describe the intended behavior but were unable to prescribe anything logically consistent in all scenarios. As such, the naming evolved "in the wild" as deemed appropriate by the hands-on developer(s) over time. This process led to the looser conventions described below.
Generally, the queues are named:
<something descriptive>_<plural entity name>_q
The dead letter queues are always named (where dlx means "dead letter exchange"):
Other configurations might have a dead letter per queue instead of one dead letter per vhost.
The exchanges are trickier. We use a suffix to denote the exchange type:
tx= topic exchange
fx= fanout exchange
dx= direct exchange
We strongly prefer and recommend topic exchanges because they’re the most flexible and can behave like either of the other types depending on the bindings.
The topic exchange name attempts to reflect the "class" of the routing keys.
For instance, if we’re publishing "trades", the exchange could be named:
And the routing keys on a message could be (e.g.):
The bindings would be:
nasdaq.# ⇒ nasdaq_trades_q
nasdaq.. ⇒ nasdaq_trades_q
nyse.# ⇒ nyse_trades_q
If requirements dictate, use the topic to multiplex to additional queues:
#.sell ⇒ all_sells_q
#.buy ⇒ all_buys_q
These are the patterns that have emerged over time which have helped us achieve a higher level of logical consistency.