Exchange Comparison
| Exchange | Routing basis | Best for | Mental model |
|---|---|---|---|
| Direct | exact routing key | command-like routing | strict switchboard |
| Fanout | no routing key match needed | broadcast | loudspeaker |
| Topic | wildcard pattern | event families | smart router |
| Headers | metadata headers | niche routing | policy gate |
err := ch.ExchangeDeclare(
"events.topic",
"topic",
true,
false,
false,
false,
nil,
)
if err != nil {
log.Fatal(err)
}Routing Decision
Situation: āĻāĻŋāĻā§ consumer āĻļā§āϧ⧠`order.*`, āĻāĻŋāĻā§ `payment.#` family āĻļā§āύāĻŦā§āĨ¤
Goal: āĻāĻāĻāĻŋ exchange type āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāĻžāĨ¤
What to think about:
- event name hierarchy already āĻāĻā§
- future routing expand āĻšāϤ⧠āĻĒāĻžāϰā§
- broadcast āύāĻž, filtered subscription āĻĻāϰāĻāĻžāϰ
āϏāĻŽā§āĻāĻžāĻŦā§āϝ āϏāĻŽāĻžāϧāĻžāύ āĻĻā§āĻā§āύ
Topic exchange best fitāĨ¤ `order.*`, `payment.#` pattern āĻĻāĻŋā§ā§ clean subscription āĻāϰāĻž āϝāĻžāĻŦā§ āĻāĻŦāĻ future hierarchy extend āĻāϰāĻžāĻ āϏāĻšāĻ āĻšāĻŦā§āĨ¤
Headers exchange āĻāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§?
Checkpoint
āύāĻŋāĻā§āϰ āĻāĻžāώāĻžā§ direct āĻāϰ topic-āĻāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ explain āĻāϰā§āĨ¤
- Direct exact match āĻāĻžā§
- Topic pattern match āĻāĻžā§
- Topic future growth-āĻāϰ āĻāύā§āϝ āĻŦā§āĻļāĻŋ flexible