What problems does SQS solve?
- Decoupling: producer and consumer does not have direct dependency on each other
- Asynchronous Processing: producer does not necessarily wait for consumer to finish its job
- Load Leveling: when a large amount of events coming into queue, consumer can still consume at its own pace
How does it work?
- SendMessage: producer send message to queue
- ReceiveMessage: consumer poll message. SQS returns message body and
ReceiptHandler - Visibility Timeout: Message goes invisible to other consumers, default 30 sec.
- Process message: consumer executes logic
- DeleteMessage: Consumer successfully handled the message, then use
ReceiptHandleto delete message.
When consumer crashes during processing message, SQS wait until visibility timeout and message will be visible for other consumers again.