SproutStackSproutStack home
IntermediateAmazon SQS

A FIFO queue meets Black Friday

Order updates use one message group. Traffic is about to grow ten times.

The setup today

Order status changes (paid, packed, shipped) go to a FIFO queue so each order's updates are applied in order. When the queue was built, every message was given the same group ID.

Current configuration

queue: order-updates.fifo
MessageGroupId: "orders"     # same for every message
consumers: 10   batching: none
ContentBasedDeduplication: false

What you know

  • Consumers spend most of their time idle, yet the backlog grows during peaks.
  • Producers retry a send if they do not hear back within 2 seconds.

The new requirement

Black Friday traffic is expected to be ten times today's. Each order's updates must still be applied in order, and a retried send must not produce a duplicate update.

Make the call

2 questions · first-try answers earn the most XP

1. Why are consumers idle while the backlog grows, and what is the fix?
2. How do you stop a retried send from creating a duplicate update?
What a strong answer also covers
  • Batch sends and receives (up to 10 per call): FIFO limits are per API call, so batching multiplies throughput.
  • Enable high-throughput mode for FIFO and spread traffic across many message groups.
  • Consumers must still be idempotent: deduplication covers retried sends for 5 minutes, not a message redelivered after a timeout.
  • One stuck order now blocks only its own group, not everyone; give the queue a FIFO dead-letter queue.

The background

More drills