On this page
Short answer
Choose Amazon SQS when the application lives in AWS, the pattern is a work queue and nobody wants to run a broker: no nodes to patch, almost no throughput ceiling on standard queues, and billing per request. Choose RabbitMQ when messages need routing by key, pattern or header, when consumers should have messages pushed to them, when a backlog may outlive SQS's 14-day maximum retention, or when the system must run outside AWS. Amazon MQ for RabbitMQ sits between: RabbitMQ on brokers AWS operates, without streams.
RabbitMQ and Amazon SQS on the same criteria
| RabbitMQ | Amazon SQS | |
|---|---|---|
| What it is | Open-source broker: producers publish to exchanges, and bindings route copies into queues and streams | AWS-managed queue service called through the SQS API |
| Queue types | Classic and quorum queues, plus streams for replayable logs | Standard (at least once, best-effort order) and FIFO (ordered per message group) |
| Throughput | Set by your cluster's hardware and queue design | Standard: nearly unlimited API calls per second. FIFO: 300 calls per second per action, higher in high throughput mode |
| Ordering | Publish order per queue; single active consumer keeps processing in order | Best effort on standard; strict within a message group on FIFO |
| Message size | A broker setting | Up to 1 MiB; up to 2 GB through the extended client and Amazon S3 |
| Retention | Until consumed or a TTL expires; streams by size or age | 4 days by default, configurable from 60 seconds to 14 days |
| Routing | Direct, fanout, topic and headers exchanges | None in SQS; fan-out and filtering through Amazon SNS |
| Protocols | AMQP 0-9-1 and AMQP 1.0 in core; MQTT, STOMP and the stream protocol through plugins | AWS SDKs and the SQS API; JMS 1.1 point-to-point through a Java library |
SQS standard vs FIFO queues
A standard queue supports nearly unlimited API calls per second, stores copies of each message across multiple Availability Zones, and delivers at least once with best-effort ordering, so consumers must tolerate duplicates. A FIFO queue preserves order within each message group and provides exactly-once processing: with a MessageDeduplicationId or content-based deduplication, a send retried within the 5-minute deduplication interval adds no duplicate.
FIFO pays in throughput. Without high throughput mode, each partition handles 300 transactions per second per API action, or 3,000 messages per second with batches of 10. High throughput mode raises the limit per Region, from 2,400 non-batched calls per second up to 70,000 in US East (N. Virginia), US West (Oregon) and Europe (Ireland).
Visibility timeout vs acknowledgements
A received SQS message is hidden for the visibility timeout, 30 seconds by default and up to 12 hours, and the consumer deletes it when the work is done. If it does not, the message reappears for another consumer; ChangeMessageVisibility extends the timer for long jobs. A redrive policy moves a message to a dead-letter queue after maxReceiveCount receives; AWS advises against one where FIFO order must never break.
In RabbitMQ, a manually acknowledged message stays queued until the consumer acknowledges it, and is requeued if the channel closes first. Quorum queues confirm a publish once a majority of replicas hold it, enforce a delivery acknowledgement timeout and dead-letter poison messages after a delivery limit, so retry policy is broker configuration, not consumer code.
Routing, exchanges and fan-out
SQS has no routing layer: a producer sends to one queue. Fan-out on AWS means an Amazon SNS topic with SQS queues subscribed, where a filter policy on message attributes or the JSON body selects what each queue receives. In RabbitMQ, producers publish to an exchange and bindings decide which queues get a copy, by exact routing key, topic pattern, header match or to all bound queues. A new consumer is a new binding, not a producer change.
Quorum queues, streams and replay
RabbitMQ quorum queues are replicated with Raft and are the documented default for a highly available queue. Streams are always persistent and replicated, readers consume without removing messages, retention is set by age or size, and super streams partition a stream across nodes. SQS has nothing equivalent: a deleted message cannot be read again, and an undeleted one expires at the end of the retention period.
Latency and protocols
RabbitMQ pushes messages to registered consumers over a long-lived connection, with prefetch limiting how many are unacknowledged at once. SQS consumers poll with ReceiveMessage; long polling waits up to 20 seconds for a message to arrive, which cuts empty responses, and one call returns up to 10 messages. No published figure holds for your network, message sizes and durability settings, so measure end-to-end latency yourself.
On protocols, RabbitMQ has spoken AMQP 1.0 natively since 4.0 alongside AMQP 0-9-1, and supports MQTT 3.1, 3.1.1 and 5.0 through a plugin. SQS clients use the AWS SDKs, or JMS through the Amazon SQS Java Messaging Library.
Operations burden and cost drivers
SQS has no servers to patch or upgrade, and its bill follows requests: every API action counts, each 64 KB chunk of a payload is billed as one request, so a 1 MiB message counts as 16, and FIFO actions are charged at FIFO rates. Data transfer within one Region is free. Model message size, batching and empty receives from short polling.
Self-managed RabbitMQ costs nodes, disks, monitoring and the people who upgrade it and answer alerts, but nothing per message. Amazon MQ bills broker instance hours, storage and data transfer. AceMQ's managed RabbitMQ services take the operating work on while the brokers stay in your AWS account.
Amazon MQ for RabbitMQ: the middle option
Amazon MQ runs RabbitMQ as a single instance in one Availability Zone or a three-node cluster across Availability Zones. It supports RabbitMQ 4.3 and 4.2 on the mq.m7g instance type and 3.13 as the remaining 3.x version, accepts AMQP 0-9-1 and, on RabbitMQ 4, AMQP 1.0. It does not support streams, and AWS warns that creating one results in data loss. Managed RabbitMQ options compared sets it beside the alternatives.
When to choose RabbitMQ or SQS
- Is the system AWS-only, with simple work queues and no one to run a broker? SQS.
- Do different consumers need different subsets of the same messages? RabbitMQ exchanges, or SNS with filter policies if you stay on SQS.
- Could messages wait longer than 14 days, or need replay? RabbitMQ quorum queues or streams.
- Do devices speak MQTT, or must the system run on premises or in a second cloud? RabbitMQ.
- Want RabbitMQ semantics without running nodes? Amazon MQ, if its versions and the lack of streams fit.
Migration notes
- Visibility timeout to acknowledgements. Delete-after-processing becomes a manual acknowledgement; long visibility timeouts become the delivery acknowledgement timeout.
- Redrive to dead-lettering.
maxReceiveCountbecomes a quorum queue delivery limit plus a dead-letter exchange. - Message groups to ordering. FIFO message groups map to per-key queues, a consistent hashing exchange or single active consumer.
- SNS fan-out to exchanges. Subscriptions and filter policies become bindings.
- Large payloads. Payloads the extended client offloads to Amazon S3 can stay there, with the RabbitMQ message carrying the S3 reference instead.
For moves to Kafka, Pulsar, NATS or other cloud queues, see RabbitMQ alternatives.
From our engagements
AceMQ's RabbitMQ delivery standard treats a move off SQS as a platform migration. It starts with a full infrastructure assessment, keeps the migration and any RabbitMQ version upgrade in separate production windows, and tests node failure, consumer reconnection and quorum elections before go-live.
How we compared
We compared RabbitMQ and Amazon SQS on eight criteria: what each is, queue types, throughput, ordering, message size, retention, routing and protocols. The figures and behaviours come from the AWS and RabbitMQ documentation, checked on 9 October 2026, and the page names the cases where each one is the better fit. AceMQ supports RabbitMQ, so the summary says plainly when SQS is the better choice. SQS quotas and RabbitMQ defaults change between releases, so confirm any limit you plan to depend on against the current documentation.
Frequently asked questions
Is SQS faster than RabbitMQ?
SQS standard queues scale without capacity planning; RabbitMQ pushes messages to connected consumers instead of waiting for a poll. Which is faster for you depends on message size, batching, durability settings and network path, so test both.
Does Amazon SQS support exactly-once delivery?
FIFO queues provide exactly-once processing: a send retried within the 5-minute deduplication interval is not added twice, and a received message stays unavailable until it is deleted or its visibility timeout expires. Standard queues deliver at least once. A consumer that misses the visibility timeout still sees the message again, so idempotent processing remains the safe design.
What is the maximum message size in SQS?
1 MiB, raised from 256 KiB in August 2025. The Amazon SQS Extended Client Library for Java or Python handles payloads up to 2 GB by storing the body in Amazon S3 and sending a reference.
Can I run RabbitMQ on AWS instead of using SQS?
Yes: self-managed on EC2 or Kubernetes, Amazon MQ for RabbitMQ, or a managed service operating brokers in your account. All keep exchanges, acknowledgements and AMQP clients; Amazon MQ does not support streams.