A topic exchange is a routing decision you can change later

Publishing directly to a queue name binds the producer to the consumer topology, so adding a second consumer means changing the publisher. A topic exchange puts a routing key in between.

# publisher knows only the event name
publish exchange=events routing_key=order.placed.tr

# consumers bind to what they care about
bind queue=warehouse   pattern=order.placed.*
bind queue=tax-tr      pattern=order.*.tr
bind queue=audit       pattern=#

* matches one word and # matches zero or more, which is the whole pattern language. The design decision is the shape of the key — entity.event.region reads well and cannot be changed once consumers bind to parts of it, so it is worth an hour up front. Adding a consumer afterwards is a binding and no deploy of the publisher.