Bird
Raised Fist0
RabbitMQdevops~20 mins

Publish-subscribe for broadcasting in RabbitMQ - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
RabbitMQ Publish-Subscribe Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
How does the publish-subscribe pattern work in RabbitMQ?

In RabbitMQ, what is the main role of the exchange in the publish-subscribe pattern?

AIt receives messages from producers and routes them to queues based on binding rules.
BIt stores messages until consumers retrieve them directly from the exchange.
CIt acts as a consumer that processes messages and sends acknowledgments.
DIt deletes messages after they are published to prevent duplicates.
Attempts:
2 left
💡 Hint

Think about how messages get from the sender to multiple receivers.

💻 Command Output
intermediate
2:00remaining
Output of binding a queue to a fanout exchange

What is the output of the following RabbitMQ command when binding a queue named logs to a fanout exchange named broadcast?

rabbitmqadmin declare binding source=broadcast destination=logs
A{"result": "success", "source": "broadcast", "destination": "logs"}
BSyntaxError: missing required parameter 'routing_key'
CError: exchange 'broadcast' does not exist
DWarning: fanout exchange ignores routing_key parameter
Attempts:
2 left
💡 Hint

Fanout exchanges do not require a routing key when binding queues.

🔀 Workflow
advanced
3:00remaining
Correct order to set up publish-subscribe with RabbitMQ fanout exchange

Arrange the steps in the correct order to set up a publish-subscribe system using a fanout exchange in RabbitMQ.

A3,2,1,4
B2,1,3,4
C1,3,2,4
D1,2,3,4
Attempts:
2 left
💡 Hint

Think about declaring resources before using them.

❓ Troubleshoot
advanced
2:30remaining
Why are subscribers not receiving messages in a fanout exchange setup?

You set up a fanout exchange and bound multiple queues to it. However, subscribers connected to these queues do not receive any messages. What is the most likely cause?

AThe queues were declared as exclusive and deleted when the publisher disconnected.
BThe exchange type was set to direct instead of fanout.
CThe queues were not bound to the exchange.
DThe routing key was missing when publishing messages.
Attempts:
2 left
💡 Hint

Check if the queues are connected to the exchange properly.

✅ Best Practice
expert
3:00remaining
Best practice for durable publish-subscribe setup in RabbitMQ

Which option describes the best practice to ensure messages are not lost in a publish-subscribe system using RabbitMQ fanout exchanges?

ADeclare queues as exclusive and auto-delete to clean up resources automatically.
BDeclare the exchange and queues as durable and publish messages as persistent.
CUse transient queues and non-persistent messages for faster delivery.
DPublish messages without acknowledgments to reduce latency.
Attempts:
2 left
💡 Hint

Think about how to keep messages safe even if RabbitMQ restarts.

Practice

(1/5)
1. What is the main purpose of using a fanout exchange in RabbitMQ's publish-subscribe pattern?
easy
A. To broadcast messages to all queues bound to the exchange
B. To route messages to a single queue based on a key
C. To store messages until a consumer is ready
D. To filter messages based on content

Solution

  1. Step 1: Understand fanout exchange behavior

    A fanout exchange sends messages to all queues bound to it without filtering or routing keys.
  2. Step 2: Compare with other exchange types

    Other exchanges like direct or topic route messages selectively, but fanout broadcasts to all.
  3. Final Answer:

    To broadcast messages to all queues bound to the exchange -> Option A
  4. Quick Check:

    Fanout = Broadcast all [OK]
Hint: Fanout means send to all queues bound [OK]
Common Mistakes:
  • Confusing fanout with direct exchange routing
  • Thinking fanout filters messages
  • Assuming fanout stores messages
2. Which of the following is the correct RabbitMQ command to declare a fanout exchange named logs?
easy
A. rabbitmqadmin declare exchange name=logs type=direct
B. rabbitmqadmin declare exchange name=logs type=fanout
C. rabbitmqadmin declare queue name=logs
D. rabbitmqadmin declare exchange name=logs type=topic

Solution

  1. Step 1: Identify the correct exchange type for broadcasting

    The fanout type is used for broadcasting messages to all bound queues.
  2. Step 2: Check the command syntax

    The command uses rabbitmqadmin declare exchange with name=logs and type=fanout to declare the exchange.
  3. Final Answer:

    rabbitmqadmin declare exchange name=logs type=fanout -> Option B
  4. Quick Check:

    Fanout exchange declaration = rabbitmqadmin declare exchange name=logs type=fanout [OK]
Hint: Fanout exchange uses type=fanout in declare command [OK]
Common Mistakes:
  • Using direct or topic instead of fanout
  • Declaring a queue instead of an exchange
  • Incorrect command syntax
3. Given the following setup:
channel.exchange_declare(exchange='logs', exchange_type='fanout')
channel.queue_declare(queue='queue1')
channel.queue_bind(exchange='logs', queue='queue1')
channel.basic_publish(exchange='logs', routing_key='', body='Hello')

What will happen when the message is published?
medium
A. The message is sent to a default queue
B. The message is sent only to 'queue1' because of the routing key
C. The message is sent to all queues bound to 'logs', including 'queue1'
D. The message is discarded because routing_key is empty

Solution

  1. Step 1: Understand fanout exchange behavior

    Fanout exchange ignores routing keys and sends messages to all bound queues.
  2. Step 2: Analyze the code bindings

    Queue 'queue1' is bound to 'logs' exchange, so it will receive the message.
  3. Final Answer:

    The message is sent to all queues bound to 'logs', including 'queue1' -> Option C
  4. Quick Check:

    Fanout ignores routing key, sends to all bound queues [OK]
Hint: Fanout ignores routing_key, sends to all bound queues [OK]
Common Mistakes:
  • Thinking routing_key matters for fanout
  • Assuming message is discarded if routing_key is empty
  • Believing message goes to default queue
4. You wrote this code to broadcast messages but only one queue receives them:
channel.exchange_declare(exchange='logs', exchange_type='fanout')
channel.queue_declare(queue='queue1')
channel.queue_declare(queue='queue2')
channel.queue_bind(exchange='logs', queue='queue1')
channel.basic_publish(exchange='logs', routing_key='', body='Test')

What is the likely problem?
medium
A. Queue 'queue2' is not bound to the exchange
B. The exchange type should be 'direct' instead of 'fanout'
C. The routing_key is missing
D. The queues are declared incorrectly

Solution

  1. Step 1: Check queue bindings

    Only 'queue1' is bound to the 'logs' exchange; 'queue2' is not bound.
  2. Step 2: Understand fanout behavior

    Fanout sends messages to all bound queues, so unbound queues won't get messages.
  3. Final Answer:

    Queue 'queue2' is not bound to the exchange -> Option A
  4. Quick Check:

    All queues must be bound to receive messages [OK]
Hint: Bind all queues to exchange to receive broadcasts [OK]
Common Mistakes:
  • Assuming routing_key is needed for fanout
  • Changing exchange type unnecessarily
  • Not binding all queues
5. You want to broadcast logs to multiple services dynamically. Which approach best ensures each service gets its own queue and receives all messages without interfering with others?
hard
A. Services publish messages directly to each other's queues
B. All services share a single queue bound to a direct exchange
C. Each service creates a queue bound to a topic exchange with different routing keys
D. Each service creates a unique queue and binds it to a shared fanout exchange

Solution

  1. Step 1: Understand publish-subscribe pattern

    Fanout exchange broadcasts messages to all bound queues, ideal for multiple receivers.
  2. Step 2: Ensure isolation and dynamic addition

    Each service having its own queue bound to the fanout exchange ensures independent consumption and easy scaling.
  3. Step 3: Evaluate other options

    Sharing a single queue causes message competition; topic exchange with routing keys is more selective, not broadcast; direct publishing is complex and error-prone.
  4. Final Answer:

    Each service creates a unique queue and binds it to a shared fanout exchange -> Option D
  5. Quick Check:

    Fanout + unique queues = broadcast to all [OK]
Hint: Use fanout exchange with unique queues per service [OK]
Common Mistakes:
  • Using a single shared queue causing message loss
  • Confusing topic exchange for broadcast
  • Direct publishing to queues instead of exchange
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard