Public service, fully managed and highly available
Queues are of 2 types Standard or FIFO
Messages can be upto 256kb in size
Clients poll queue to retrieve the messages
Once retrieved, the messages are hidden for the length of visibility timeout
Client needs to explicitly delete message, otherwise the message reappers on the queue after visibility timeout
Dead Letter Queues can be used for repeatedly failing messages
Standard Queue - Gurantee atleast once delivery but order of delivery is not guranteed
FIFO Queue - Gurantee exactly once delivery & in order of addition. They need to have .fifo suffix
FIFO Queue performance is limited to 3000 messages/second with batching & 300 messages/second without batching. Standard queues can scale to near infinity
Billing of SQS is based on nnumber of polling requests
Short polling immediately returns with every poll constituting to 1 request
Long polling can have upto 20 seconds of wait time. Preferred way of polling
SQS supports encryption at rest using KMS.
Identity policies or queue policies are used to give access to queue. Identity policy is required for cross account access
Extended Client Library
Allows large payloads to be processed
It uploads payload bigger than 256kb is automatically stored to S3 & link to the bucket is added in the message
After receiving the message, when the message is deleted , S3 stored message is also automatically deleted.
Delay Queues
Enables delayed delivery to the consumers
Visiblity timeout defaults to 30 seconds but user can specify values ranging from 0 seconds to 12 hours
A delay queue has DelaySeconds configured. During this period the message is not visible on the queue
Max value for Delay is 15 minutes
FIFO queues do not support delay
Dead Letter Queues
Handling recurring failures
Redrive policy specifies the source queue, the dead letter queue & maxreceivecount
When receivecount > maxreceivecount and the message is not deleted it is moved to DLQ
When a message has lived beyond its retention period, it is dropped. When a message is added to a queue the timestamp is added to the queue
When a message is sent to DLQ the timestamp is not reset. So it will be droped if the time has exceeded the retention time. Hence DLQ should have retention period > queue retention period