Bird
Raised Fist0
RabbitMQdevops~20 mins

Shovel and Federation for multi-DC in RabbitMQ - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Multi-DC RabbitMQ Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Difference between Shovel and Federation plugins

Which statement correctly describes the main difference between RabbitMQ's Shovel and Federation plugins in a multi-data-center setup?

AFederation is designed for dynamic topology changes and scales better across multiple data centers, while Shovel is more static and configured per link.
BShovel only works within a single data center, whereas Federation works only across multiple data centers.
CShovel creates a continuous, automatic message transfer between brokers, while Federation requires manual message pulling.
DFederation duplicates messages locally, while Shovel deletes messages after transfer.
Attempts:
2 left
💡 Hint

Think about which plugin adapts better to changing network conditions and scales automatically.

💻 Command Output
intermediate
2:00remaining
Output of Shovel status command

What is the output of the following command on a RabbitMQ node with a configured shovel named 'shovel1' currently running?

rabbitmqctl shovel_status shovel1
A{"state":"running","source":"amqp://source","destination":"amqp://dest"}
BError: shovel 'shovel1' not found
C{"state":"stopped","source":"amqp://source","destination":"amqp://dest"}
Dshovel1: active
Attempts:
2 left
💡 Hint

Check the JSON output format for shovel status showing state and endpoints.

❓ Configuration
advanced
3:00remaining
Correct Shovel configuration for multi-DC message transfer

Which of the following RabbitMQ shovel configuration snippets correctly sets up a shovel to transfer messages from a queue named 'orders' in one data center to a queue named 'orders' in another data center?

A
shovels:
  orders_shovel:
    source-uri: amqp://dc1
    source-exchange: orders
    destination-uri: amqp://dc2
    destination-queue: orders
    ack-mode: on-publish
B
shovels:
  orders_shovel:
    source-uri: amqp://dc1
    source-exchange: orders
    destination-uri: amqp://dc2
    destination-exchange: orders
    ack-mode: on-publish
C
shovels:
  orders_shovel:
    source-uri: amqp://dc1
    source-queue: orders
    destination-uri: amqp://dc2
    destination-queue: orders
    ack-mode: on-confirm
D
shovels:
  orders_shovel:
    source-uri: amqp://dc1
    source-queue: orders
    destination-uri: amqp://dc2
    destination-exchange: orders
    ack-mode: on-confirm
Attempts:
2 left
💡 Hint

Remember that queues and exchanges are different entities; the source and destination must match types.

❓ Troubleshoot
advanced
2:30remaining
Troubleshooting Federation link failure

You have a RabbitMQ federation link configured between two data centers. Messages are not flowing, and the federation link status shows 'down'. Which of the following is the most likely cause?

AThe shovel plugin is not enabled on the downstream node.
BThe upstream URI is incorrect or unreachable from the downstream node.
CThe queue names do not match exactly on both sides of the federation link.
DThe federation plugin requires manual message acknowledgment to start.
Attempts:
2 left
💡 Hint

Check connectivity and URI correctness first when federation links are down.

🔀 Workflow
expert
3:00remaining
Order of steps to set up Federation for multi-DC RabbitMQ

Arrange the following steps in the correct order to set up a RabbitMQ Federation link between two data centers:

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

Think about enabling features before configuring them and verifying last.

Practice

(1/5)
1. What is the main purpose of RabbitMQ Shovel in a multi-data center (multi-DC) setup?
easy
A. To encrypt messages within a single RabbitMQ server
B. To share user credentials across multiple RabbitMQ servers
C. To automatically scale RabbitMQ nodes in a cluster
D. To copy messages between queues on different RabbitMQ servers

Solution

  1. Step 1: Understand Shovel's role

    Shovel is designed to move or copy messages from one queue to another, even across different RabbitMQ servers.
  2. Step 2: Compare options

    Options B, C, and D describe unrelated features like credential sharing, scaling, or encryption, which are not Shovel's purpose.
  3. Final Answer:

    To copy messages between queues on different RabbitMQ servers -> Option D
  4. Quick Check:

    Shovel copies messages = A [OK]
Hint: Shovel moves messages between queues on different servers [OK]
Common Mistakes:
  • Confusing Shovel with Federation
  • Thinking Shovel manages user credentials
  • Assuming Shovel handles encryption
2. Which of the following is the correct minimal configuration snippet to define a Shovel in RabbitMQ's configuration file?
easy
A. listeners: amqp: port: 5672
B. shovels: my_shovel: source-uri: amqp:// source-queue: source_queue destination-uri: amqp://remote destination-queue: dest_queue
C. clusters: nodes: [rabbit@node1, rabbit@node2]
D. federation: upstreams: my_upstream: uri: amqp://remote exchanges: ["my_exchange"]

Solution

  1. Step 1: Identify Shovel configuration format

    Shovel config uses 'shovels' key with shovel name and source/destination URIs and queues.
  2. Step 2: Match options to Shovel syntax

    shovels: my_shovel: source-uri: amqp:// source-queue: source_queue destination-uri: amqp://remote destination-queue: dest_queue matches the correct syntax for defining a shovel. Options A, B, and C relate to listeners, federation, and clustering, not shovel.
  3. Final Answer:

    shovels: my_shovel: source-uri: amqp:// source-queue: source_queue destination-uri: amqp://remote destination-queue: dest_queue -> Option B
  4. Quick Check:

    Shovel config starts with 'shovels:' = D [OK]
Hint: Shovel config uses 'shovels:' with source and destination URIs [OK]
Common Mistakes:
  • Confusing federation config with shovel config
  • Using cluster or listener config for shovel
  • Missing source or destination queue keys
3. Given a federation upstream configured to share an exchange named logs from a remote RabbitMQ server, what will happen if a message is published to the local logs exchange?
medium
A. The message will stay local and not be sent to the remote server
B. The message will be forwarded to the remote exchange automatically
C. The message will be received from the remote exchange and appear locally
D. The message will be duplicated on both local and remote exchanges

Solution

  1. Step 1: Understand Federation direction

    Federation pulls messages from remote to local, not the other way around.
  2. Step 2: Analyze message flow

    Publishing locally to the exchange does not send messages upstream; messages flow from remote to local only.
  3. Final Answer:

    The message will stay local and not be sent to the remote server -> Option A
  4. Quick Check:

    Federation pulls from remote; local publish stays local = B [OK]
Hint: Federation pulls messages from remote to local, not vice versa [OK]
Common Mistakes:
  • Thinking federation pushes messages upstream
  • Assuming messages duplicate automatically
  • Confusing federation with shovel direction
4. You configured a Shovel to move messages from a local queue to a remote queue, but no messages appear on the remote side. Which is the most likely cause?
medium
A. The Shovel's destination URI is incorrect or unreachable
B. The local queue is empty, so no messages to move
C. The Federation plugin is not enabled on the local server
D. The RabbitMQ server is running in standalone mode

Solution

  1. Step 1: Check Shovel connectivity

    If the destination URI is wrong or unreachable, messages cannot be delivered remotely.
  2. Step 2: Eliminate other causes

    Local queue being empty means no messages to move, but question implies messages exist. Federation plugin is unrelated to Shovel. Standalone mode does not prevent Shovel operation.
  3. Final Answer:

    The Shovel's destination URI is incorrect or unreachable -> Option A
  4. Quick Check:

    Shovel needs correct destination URI = A [OK]
Hint: Check destination URI if shovel moves no messages [OK]
Common Mistakes:
  • Confusing Federation plugin with Shovel
  • Ignoring network or URI errors
  • Assuming local queue always has messages
5. In a multi-DC RabbitMQ setup, you want to ensure messages published in any data center are available in all others with minimal delay and no duplicates. Which combination is best?
hard
A. Use only Shovel to copy messages between queues in data centers
B. Use only Federation to share queues between data centers
C. Use Federation to share exchanges and Shovel to copy queues between data centers
D. Use clustering across data centers with mirrored queues

Solution

  1. Step 1: Understand Federation and Shovel roles

    Federation shares exchanges or queues, enabling message sharing with minimal delay. Shovel copies messages between queues reliably.
  2. Step 2: Combine for best multi-DC setup

    Using Federation for exchange sharing ensures messages are available across DCs. Shovel ensures queues are synchronized, preventing duplicates and delays.
  3. Final Answer:

    Use Federation to share exchanges and Shovel to copy queues between data centers -> Option C
  4. Quick Check:

    Federation + Shovel = best multi-DC sync [OK]
Hint: Combine Federation for sharing and Shovel for copying queues [OK]
Common Mistakes:
  • Relying on clustering across data centers (not recommended)
  • Using only one method causing delays or duplicates
  • Confusing queue sharing with exchange sharing
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