Skip to main content

Comparison: Amazon SQS FIFO vs Standard Queues

Introduction

Amazon Simple Queue Service (SQS) offers two types of message queues: Standard and First-In-First-Out (FIFO). Understanding the differences between these two is crucial for selecting the right type based on the application's requirements.

Building webhooks?
Svix is the enterprise ready webhooks sending service. With Svix, you can build a secure, reliable, and scalable webhook platform in minutes. Looking to send webhooks? Give it a try!

FIFO Queues vs Standard Queues

FIFO Queues

FIFO queues ensure that the order of messages is preserved, meaning messages are processed exactly in the order they are sent. They also prevent duplicate messages.

  • Order Guarantee: Messages are delivered and processed in the exact order they are sent.
  • Exactly-Once Processing: Prevents duplicates, ensuring a message is delivered once and remains available until a consumer processes and deletes it.
  • Limitations: FIFO queues have a lower throughput compared to standard queues. The default limit is 300 transactions per second (TPS), but batching can increase this to 3,000 TPS.
  • Use Cases: Suitable for applications where the order of operations and events is critical, like banking transactions or order processing systems.

Standard Queues

Standard queues offer maximum throughput, best-effort ordering, and at-least-once delivery. They might introduce duplicates and do not guarantee the order of message delivery.

  • High Throughput: They offer nearly unlimited transactions per second.
  • At-Least-Once Delivery: Messages are delivered at least once, but occasionally more than once, leading to duplicates.
  • Best-Effort Ordering: Messages are generally delivered in the same order as sent, but there's no guarantee, and occasionally messages might be out of order.
  • Use Cases: Ideal for applications where processing speed is critical and the application can tolerate duplicates or out-of-order messages. Examples include log data processing and real-time analytics.

Code Sample: Working with FIFO and Standard Queues

Creating a Standard Queue

import boto3

sqs = boto3.client('sqs')

# Create a standard queue
standard_queue = sqs.create_queue(QueueName='MyStandardQueue')

Creating a FIFO Queue

Note: FIFO queue names must end with the .fifo suffix.

# Create a FIFO queue
fifo_queue = sqs.create_queue(
QueueName='MyFifoQueue.fifo',
Attributes={'FifoQueue': 'true'}
)

Sending Messages to a FIFO Queue

FIFO queues require a MessageGroupId.

response = sqs.send_message(
QueueUrl=fifo_queue_url,
MessageBody='Your message',
MessageGroupId='messageGroup1'
)

Receiving and Deleting Messages

The process of receiving and deleting messages is similar for both queue types.

messages = sqs.receive_message(QueueUrl=queue_url, MaxNumberOfMessages=10)
for message in messages.get('Messages', []):
# Process the message
sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=message['ReceiptHandle'])

Conclusion

Choosing between SQS FIFO and Standard queues depends on the specific needs of your application. FIFO queues are ideal when the order of messages and avoiding duplicates are paramount, while Standard queues are suited for high-throughput, less sensitive to ordering applications.