SQS
Protocol: Query (XML) and JSON 1.0 (both supported)
Endpoint: POST http://localhost:4566/
Supported Actions
| Action | Description |
|---|---|
CreateQueue |
Create a standard or FIFO queue |
DeleteQueue |
Delete a queue |
ListQueues |
List all queues |
GetQueueUrl |
Look up a queue URL by name |
GetQueueAttributes |
Get queue configuration attributes |
SetQueueAttributes |
Update queue configuration |
SendMessage |
Send a message to a queue |
SendMessageBatch |
Send up to 10 messages in one call |
ReceiveMessage |
Poll for messages |
DeleteMessage |
Acknowledge and delete a message |
DeleteMessageBatch |
Delete multiple messages at once |
ChangeMessageVisibility |
Extend or reset a message's visibility timeout |
ChangeMessageVisibilityBatch |
Change visibility for multiple messages |
PurgeQueue |
Delete all messages in a queue |
TagQueue |
Add tags to a queue |
UntagQueue |
Remove tags from a queue |
ListQueueTags |
List tags on a queue |
ListDeadLetterSourceQueues |
Find queues that use this queue as DLQ |
StartMessageMoveTask |
Start a DLQ redrive task |
ListMessageMoveTasks |
List DLQ redrive tasks |
Local Inspection Endpoint
For test assertions and debugging, Floci exposes a LocalStack-compatible endpoint that lets you peek at queue contents without consuming messages:
| Method | Path | Description |
|---|---|---|
GET |
/_aws/sqs/messages?QueueUrl=<url> |
List all messages in the queue (non-destructive) |
DELETE |
/_aws/sqs/messages?QueueUrl=<url> |
Purge all messages from the queue |
GET returns every message currently in the queue — including in-flight messages — without changing visibility timeouts or advancing receive counts. It does not remove messages.
DELETE is equivalent to PurgeQueue and removes all messages.
Response shape
{
"messages": [
{
"MessageId": "abc123",
"MD5OfBody": "...",
"Body": "{\"event\":\"order.placed\"}",
"ReceiptHandle": null,
"Attributes": {
"SentTimestamp": "1714000000000",
"ApproximateReceiveCount": "0"
},
"MessageAttributes": {}
}
]
}
ReceiptHandle is null for messages that have not yet been received. FIFO messages include MessageGroupId, MessageDeduplicationId, and SequenceNumber in Attributes when set.
Example
QUEUE_URL="http://localhost:4566/000000000000/orders"
# Peek at messages without consuming them
curl "http://localhost:4566/_aws/sqs/messages?QueueUrl=$QUEUE_URL"
# Purge the queue
curl -X DELETE "http://localhost:4566/_aws/sqs/messages?QueueUrl=$QUEUE_URL"
Configuration
| Variable | Default | Description |
|---|---|---|
FLOCI_SERVICES_SQS_ENABLED |
true |
Enable or disable the service |
FLOCI_SERVICES_SQS_DEFAULT_VISIBILITY_TIMEOUT |
30 |
Default message visibility timeout (seconds) |
FLOCI_SERVICES_SQS_MAX_MESSAGE_SIZE |
262144 |
Maximum message size in bytes (256 KB) |
FLOCI_SERVICES_SQS_CLEAR_FIFO_DEDUPLICATION_CACHE_ON_PURGE |
false |
When true, PurgeQueue also clears the FIFO deduplication cache for the queue and any SNS FIFO topics subscribed to it |
Examples
export AWS_ENDPOINT_URL=http://localhost:4566
# Create a standard queue
aws sqs create-queue --queue-name orders --endpoint-url $AWS_ENDPOINT_URL
# Create a FIFO queue
aws sqs create-queue \
--queue-name orders.fifo \
--attributes FifoQueue=true \
--endpoint-url $AWS_ENDPOINT_URL
# Send a message
QUEUE_URL="$AWS_ENDPOINT_URL/000000000000/orders"
aws sqs send-message \
--queue-url $QUEUE_URL \
--message-body '{"event":"order.placed","id":"abc123"}' \
--endpoint-url $AWS_ENDPOINT_URL
# Receive messages
aws sqs receive-message \
--queue-url $QUEUE_URL \
--max-number-of-messages 10 \
--endpoint-url $AWS_ENDPOINT_URL
# Delete a message (replace RECEIPT_HANDLE with the value from ReceiveMessage)
aws sqs delete-message \
--queue-url $QUEUE_URL \
--receipt-handle "RECEIPT_HANDLE" \
--endpoint-url $AWS_ENDPOINT_URL
# Set up a dead-letter queue
DLQ_ARN=$(aws sqs get-queue-attributes \
--queue-url $AWS_ENDPOINT_URL/000000000000/orders-dlq \
--attribute-names QueueArn \
--query Attributes.QueueArn \
--output text \
--endpoint-url $AWS_ENDPOINT_URL)
aws sqs set-queue-attributes \
--queue-url $QUEUE_URL \
--attributes "{\"RedrivePolicy\":\"{\\\"deadLetterTargetArn\\\":\\\"$DLQ_ARN\\\",\\\"maxReceiveCount\\\":3}\"}" \
--endpoint-url $AWS_ENDPOINT_URL