---
title: Message Ordering, Backpressure, and RabbitMQ DLQs on AWS
description: FIFO guarantees shrink throughput, and unbounded queues only move backpressure to your AWS bill. Ordering, flow control, and Amazon MQ dead-letter patterns vs Kinesis resharding.
url: https://www.joinhorizon.co/blog/message-ordering-backpressure-rabbitmq-dlq-aws/
datePublished: 2026-06-12T00:00:00.000Z
dateModified: 2026-10-28T00:00:00.000Z
author: palaniappan-p
category: Cloud Architecture
tags: engineering-guide, messaging, sqs, aws
---

# Message Ordering, Backpressure, and RabbitMQ DLQs on AWS

> FIFO guarantees shrink throughput, and unbounded queues only move backpressure to your AWS bill. Ordering, flow control, and Amazon MQ dead-letter patterns vs Kinesis resharding.

**June 2026**: **SQS FIFO** gives order within a message group, capped at **300 messages/s per API action** (3,000 with batching) unless high-throughput mode is on. Ordering has a throughput price. **Standard queues** maximize throughput without global order.

## Symptom → mechanism → AWS control

| Production symptom          | Mechanism                    | AWS control                                      |
| --------------------------- | ---------------------------- | ------------------------------------------------ |
| Out-of-order processing     | Multiple competing consumers | Single active consumer or partition-key ordering |
| Consumer OOM under burst    | Unbounded prefetch           | RabbitMQ prefetch limit, SQS maxReceiveCount     |
| Poison message blocks queue | No dead-letter path          | Amazon MQ DLQ, SQS redrive policy                |

**Opinionated take:** Prefer SQS FIFO or MSK partition ordering over RabbitMQ on AWS unless you need AMQP protocol compatibility. DLQ everything.

> **Benchmark pattern (hypothetical workload):** Amazon MQ RabbitMQ, ordered queue 2K msgs/sec, consumer prefetch=10 prevents OOM; backpressure via publisher confirms stalls at 85% queue depth; DLQ captures 0.4% poison messages without blocking main queue.

## Ordering guarantees

| System   | Guarantee                        |
| -------- | -------------------------------- |
| SQS FIFO | Per `MessageGroupId`             |
| Kinesis  | Per partition key                |
| MSK      | Per partition                    |
| RabbitMQ | Single active consumer per queue |

## Backpressure

Producers faster than consumers → queue depth grows → **latency** and **cost**. Responses:

- Scale consumers (ECS/EKS HPA on custom metric `ApproximateNumberOfMessagesVisible`)
- Drop to DLQ with alarm threshold
- **Rate limit** producers at API Gateway

## Amazon MQ (RabbitMQ) DLQ

Configure **dead-letter exchange** + TTL; mirror to CloudWatch via plugin/logs. Retry with exponential backoff; do not infinite requeue.

## AWS services map

| Need                | Service                                 | Skip when                                    |
| ------------------- | --------------------------------------- | -------------------------------------------- |
| AMQP with ordering  | Amazon MQ RabbitMQ                      | Kafka partition ordering suffices            |
| Managed DLQ         | SQS dead-letter queue                   | Fire-and-forget SNS with no retry            |
| Backpressure signal | SQS ApproximateAgeOfOldestMessage alarm | Synchronous HTTP with client-side retry only |

## What to do this week

1. Set `maxReceiveCount` on SQS redrive policy.
2. Alarm queue age p99 &gt; SLO.
3. Document ordering requirements per event type and downgrade to standard where possible.

## More in This Track

Part of the **Engineering Guides** library (June 2026).

- Previous: [Part 1](https://www.joinhorizon.co/blog/kafka-msk-partition-rebalancing-exactly-once-semantics/)
- Next: [Part 3](https://www.joinhorizon.co/blog/reliable-queue-systems-aws-sqs-kafka-redis/)
- Browse tracks: [Engineering Guides hub](https://www.joinhorizon.co/resources/engineering-guides/)

## What this guide doesn't cover

MSK exactly-once semantics are covered in part 1 of this track.

## FAQ

### When should I skip RabbitMQ on Amazon MQ?
Prefer SQS FIFO or MSK partition ordering unless you need AMQP. FIFO has a throughput price: 300 messages per second per API action without batching (3,000 with batching) unless you enable high-throughput mode. Unbounded RabbitMQ prefetch moves backpressure onto the bill and the consumer heap.

### Does SQS FIFO give global order?
No. Order is per MessageGroupId. Kinesis and MSK order per partition. Competing consumers on a standard queue will reorder. Document the real ordering requirement per event type and downgrade to standard where you can.

### What could go wrong without a DLQ?
A poison message blocks the queue. Set SQS maxReceiveCount and redrive, or an Amazon MQ dead-letter exchange plus TTL. Retry with backoff; do not infinite-requeue.

### How do I signal backpressure before OOM?
Bound prefetch, scale consumers on ApproximateNumberOfMessagesVisible, alarm oldest-message age against the SLO, and rate-limit producers at API Gateway. Queue depth is latency and cost, not a buffer of infinite safety.

---

*Source: https://www.joinhorizon.co/blog/message-ordering-backpressure-rabbitmq-dlq-aws/*
