Bird
Raised Fist0
RabbitMQdevops~10 mins

Binding keys and routing keys in RabbitMQ - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a direct exchange named 'logs'.

RabbitMQ
channel.exchange_declare(exchange='logs', exchange_type=[1])
Drag options to blanks, or click blank then click option'
Atopic
Bfanout
Cdirect
Dheaders
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'topic' or 'fanout' exchange types instead of 'direct'.
2fill in blank
medium

Complete the code to bind queue 'error_logs' to exchange 'logs' with routing key 'error'.

RabbitMQ
channel.queue_bind(queue='error_logs', exchange='logs', routing_key=[1])
Drag options to blanks, or click blank then click option'
A'error'
B'debug'
C'warning'
D'info'
Attempts:
3 left
💡 Hint
Common Mistakes
Binding with wrong routing keys like 'info' or 'debug'.
3fill in blank
hard

Fix the error in the code to publish a message with routing key 'info' to exchange 'logs'.

RabbitMQ
channel.basic_publish(exchange='logs', routing_key=[1], body='System started')
Drag options to blanks, or click blank then click option'
A'warning'
B'error'
C'start'
D'info'
Attempts:
3 left
💡 Hint
Common Mistakes
Using routing keys that do not match any binding key, causing message loss.
4fill in blank
hard

Fill both blanks to declare a topic exchange named 'topic_logs' and bind queue 'critical_logs' with binding key 'kern.critical'.

RabbitMQ
channel.exchange_declare(exchange='topic_logs', exchange_type=[1])
channel.queue_bind(queue='critical_logs', exchange='topic_logs', routing_key=[2])
Drag options to blanks, or click blank then click option'
Atopic
Bdirect
C'kern.critical'
D'critical.kern'
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'direct' exchange type for topic routing.
Swapping parts of the binding key incorrectly.
5fill in blank
hard

Fill all three blanks to publish a message with routing key 'kern.info' to exchange 'topic_logs' and bind queue 'info_logs' with binding key 'kern.*'.

RabbitMQ
channel.basic_publish(exchange=[1], routing_key=[2], body='Kernel info message')
channel.queue_bind(queue='info_logs', exchange='topic_logs', routing_key=[3])
Drag options to blanks, or click blank then click option'
A'topic_logs'
B'kern.info'
C'kern.*'
D'info_logs'
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong exchange name in publish.
Binding with incorrect pattern that won't match routing key.

Practice

(1/5)
1. What is the main purpose of a binding key in RabbitMQ?
easy
A. To label messages for routing
B. To create a new exchange
C. To connect a queue to an exchange and filter messages
D. To delete a queue

Solution

  1. Step 1: Understand the role of binding keys

    Binding keys link queues to exchanges and decide which messages the queue receives.
  2. Step 2: Differentiate from routing keys

    Routing keys label messages, but binding keys filter messages for queues.
  3. Final Answer:

    To connect a queue to an exchange and filter messages -> Option C
  4. Quick Check:

    Binding key = filter for queues [OK]
Hint: Binding keys link queues to exchanges filtering messages [OK]
Common Mistakes:
  • Confusing binding keys with routing keys
  • Thinking binding keys create exchanges
  • Assuming binding keys delete queues
2. Which of the following is the correct syntax to bind a queue named myQueue to an exchange myExchange with a binding key key.* using RabbitMQ CLI?
easy
A. rabbitmqadmin declare binding source=myExchange destination=myQueue routing_key=key.*
B. rabbitmqctl bind_queue myExchange myQueue key.*
C. rabbitmqctl declare binding myQueue myExchange key.*
D. rabbitmqadmin bind myQueue myExchange key.*

Solution

  1. Step 1: Identify the correct RabbitMQ CLI command

    The rabbitmqadmin declare binding command is used to create bindings with source, destination, and routing_key parameters.
  2. Step 2: Match parameters to syntax

    Source is the exchange, destination is the queue, and routing_key is the binding key pattern.
  3. Final Answer:

    rabbitmqadmin declare binding source=myExchange destination=myQueue routing_key=key.* -> Option A
  4. Quick Check:

    Use rabbitmqadmin declare binding with source, destination, routing_key [OK]
Hint: Use rabbitmqadmin declare binding with source, destination, routing_key [OK]
Common Mistakes:
  • Using rabbitmqctl bind_queue which is not a valid command
  • Swapping queue and exchange names
  • Omitting routing_key parameter
3. Given a topic exchange with a queue bound using binding key logs.*.error, which routing key will deliver a message to this queue?
medium
A. logs.system.error
B. logs.error.system
C. logs.system.warning
D. error.logs.system

Solution

  1. Step 1: Understand the binding key pattern

    The binding key logs.*.error matches routing keys with three words where the first is 'logs', the second can be any word, and the third is 'error'.
  2. Step 2: Match each option to the pattern

    logs.system.error: 'logs.system.error' matches exactly.
    logs.error.system: 'logs.error.system' ends with 'system', not 'error'.
    logs.system.warning: 'logs.system.warning' ends with 'warning', not 'error'.
    error.logs.system: 'error.logs.system' does not start with 'logs'.
  3. Final Answer:

    logs.system.error -> Option A
  4. Quick Check:

    Binding key pattern matches routing key exactly [OK]
Hint: Match binding key wildcards to routing key words [OK]
Common Mistakes:
  • Ignoring position of words in routing key
  • Confusing '*' wildcard with '#' wildcard
  • Assuming partial matches are enough
4. You have a queue bound to a topic exchange with binding key data.#. You send a message with routing key data but it is not received by the queue. What is the likely cause?
medium
A. Binding key data.# does not match routing key data
B. Routing key data should be data.#
C. Queue is not bound to the exchange
D. Binding key data.# matches routing key data, so the problem is elsewhere

Solution

  1. Step 1: Check if binding key matches routing key

    The binding key data.# matches routing keys starting with 'data' and zero or more words after. The routing key 'data' matches because '#' can match zero words.
  2. Step 2: Consider other causes

    Since the binding key matches, the message not arriving is likely due to other issues like queue not bound or exchange type mismatch.
  3. Final Answer:

    Binding key data.# matches routing key data, so the problem is elsewhere -> Option D
  4. Quick Check:

    Binding key '#' matches zero or more words [OK]
Hint: Remember '#' matches zero or more words including none [OK]
Common Mistakes:
  • Thinking '#' requires at least one word
  • Assuming routing key must equal binding key exactly
  • Ignoring other configuration issues
5. You want to route messages with routing keys order.created and order.updated to a queue named orderQueue using a topic exchange. Which most specific binding key should you use to receive both types of messages?
hard
A. order.created, order.updated
B. order.*
C. *.created, *.updated
D. order.#

Solution

  1. Step 1: Understand routing keys and binding keys

    Routing keys are 'order.created' and 'order.updated'. The binding key must match both.
  2. Step 2: Analyze each binding key option

    order.*: 'order.*' matches 'order.created' and 'order.updated' because '*' matches exactly one word.
    order.#: 'order.#' matches these and more, but is broader than needed.
    *.created, *.updated: '*.created, *.updated' do not match because the first word must be 'order'.
    order.created, order.updated: 'order.created, order.updated' is not valid syntax for a single binding key; multiple bindings needed.
  3. Final Answer:

    order.* -> Option B
  4. Quick Check:

    'order.*' matches 'order.created' and 'order.updated' [OK]
Hint: Use 'order.*' to match one word after 'order' [OK]
Common Mistakes:
  • Using '#' when '*' is enough
  • Trying to use multiple keys in one binding key string
  • Misplacing wildcards in binding keys
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