0
0
RabbitMQdevops~10 mins

Fanout exchange (broadcast) in RabbitMQ - Step-by-Step Execution

Choose your learning style9 modes available
Process Flow - Fanout exchange (broadcast)
Message sent to Fanout Exchange
Fanout Exchange receives message
Fanout Exchange broadcasts message
Queue 1
Consumers 1
A message sent to a fanout exchange is broadcast to all queues bound to it, delivering the message to all consumers.
Execution Sample
RabbitMQ
channel.exchange_declare(exchange='logs', exchange_type='fanout')
channel.queue_declare(queue='Q1')
channel.queue_bind(exchange='logs', queue='Q1')
channel.basic_publish(exchange='logs', routing_key='', body='Hello World!')
Declare a fanout exchange 'logs', bind queue 'Q1' to it, then publish a message that is broadcast to all bound queues.
Process Table
StepActionExchange StateQueues BoundMessage RoutingOutput
1Declare fanout exchange 'logs'logs (fanout)nonenoneExchange created
2Declare queue 'Q1'logs (fanout)nonenoneQueue Q1 created
3Bind queue 'Q1' to 'logs'logs (fanout)Q1noneQ1 bound to logs
4Publish message 'Hello World!' to 'logs'logs (fanout)Q1Broadcast to Q1Message delivered to Q1
5Message received by consumer from Q1logs (fanout)Q1DeliveredConsumer processes 'Hello World!'
6No more queues boundlogs (fanout)Q1No further routingEnd of routing
💡 Message broadcast complete; all bound queues received the message
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
exchange 'logs'undefinedfanout exchange createdfanout exchange createdfanout exchange createdfanout exchange createdfanout exchange created
queue 'Q1'undefinedundefinedqueue declaredqueue bound to logsqueue bound to logsqueue bound to logs
messagenonenonenonepublished to logsdelivered to Q1delivered to Q1
Key Moments - 2 Insights
Why does the routing key not affect message delivery in a fanout exchange?
Because fanout exchanges ignore routing keys and broadcast messages to all bound queues, as shown in step 4 where routing_key is empty but message still reaches Q1.
What happens if no queues are bound to the fanout exchange?
The message is broadcast to zero queues and effectively dropped, since there are no queues to receive it. This is implied by the absence of queues in step 1 and 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 4, which queues receive the message?
AOnly Q1
BAll queues bound to 'logs'
CNo queues
DOnly queues with matching routing key
💡 Hint
Refer to 'Queues Bound' and 'Message Routing' columns at step 4
At which step is the queue 'Q1' bound to the exchange 'logs'?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Check the 'Action' and 'Queues Bound' columns for binding info
If a second queue 'Q2' is bound after step 3, what changes in the message routing at step 4?
AMessage is sent to Q1 and Q2
BMessage is sent only to Q1
CMessage is sent only to Q2
DMessage is not sent to any queue
💡 Hint
Fanout exchange broadcasts to all bound queues, see concept flow and step 4 routing
Concept Snapshot
Fanout Exchange (broadcast):
- Declared with type 'fanout'
- Ignores routing keys
- Broadcasts messages to all bound queues
- Useful for sending same message to multiple consumers
- Queues must be bound to receive messages
- Messages dropped if no queues bound
Full Transcript
A fanout exchange in RabbitMQ receives messages and broadcasts them to all queues bound to it, ignoring routing keys. First, the exchange is declared as type 'fanout'. Then queues are declared and bound to this exchange. When a message is published to the fanout exchange, it is copied and sent to every bound queue. Consumers attached to these queues receive the message. If no queues are bound, messages are discarded. This broadcast pattern is useful when the same message must reach multiple consumers simultaneously.