AWS : Amazon Simple Queue Service(SQS)
Tags: programming, aws, python, tutorial
Published: 2022-12-10 14:10:58

Amazon Simple Queue Service (SQS) is a fully managed message queueing service that makes it easy to decouple and scale microservices, distributed systems, and serverless applications. SQS allows you to send and receive messages between services, components, and applications, without losing messages or requiring each component to be always available. This makes it easier to build and operate applications that are resilient, flexible, and scalable. 

With SQS, you can send and receive messages with the confidence that your messages will be delivered and processed in a reliable and scalable way.


---

## Benefits of using SQS

There are several reasons why you might want to use Amazon Simple Queue Service (SQS) in your application. Some of the key benefits of SQS include:

- Scalability: SQS is highly scalable, allowing you to easily increase or decrease the amount of traffic that your application can handle.
- Flexibility: SQS is a fully managed service, so you don't have to worry about managing the underlying infrastructure. This allows you to focus on building your application, rather than worrying about maintaining servers or other infrastructure.
- Reliability: SQS is designed to be highly reliable, with built-in redundancies and automatic retries to ensure that your messages are delivered even in the event of failures.
- Cost-effectiveness: SQS is a pay-as-you-go service, so you only pay for the messages that you send and receive. This can make it an affordable option for applications that need to process large volumes of messages.

## Example of AWS Lambda calling the SQS 

```py
import boto3

sqs = boto3.client('sqs')

def lambda_handler(event, context):
    # Get the queue URL
    queue_url = sqs.get_queue_url(QueueName='my-queue')['QueueUrl']

    # Send a message to the queue
    response = sqs.send_message(
        QueueUrl=queue_url,
        MessageBody='This is a test message'
    )
    
    # Print the message ID
    print(response['MessageId'])
```

In this example, the Lambda function first gets the URL of the SQS queue that it wants to access. Then, it uses the send_message method to send a message to the queue. Finally, it prints the ID of the message that was sent. 

In a real-world application, you would likely want to include additional functionality, such as error handling and processing the messages that are received from the queue.


## Example : How to consume the message 

```py
import boto3

sqs = boto3.client('sqs')

def lambda_handler(event, context):
    # Get the queue URL
    queue_url = sqs.get_queue_url(QueueName='my-queue')['QueueUrl']

    # Receive messages from the queue
    messages = sqs.receive_message(
        QueueUrl=queue_url,
        MaxNumberOfMessages=10,
        WaitTimeSeconds=20
    )

    # Process the messages
    for message in messages['Messages']:
        # Do something with the message...

        # Delete the message from the queue
        sqs.delete_message(
            QueueUrl=queue_url,
            ReceiptHandle=message['ReceiptHandle']
        )

```

In this example, the Lambda function first gets the URL of the SQS queue that it wants to access. Then, it uses the _receive_message_ method to receive up to 10 messages from the queue, waiting up to 20 seconds for messages to arrive. If any messages are received, the function loops through them and processes them in some way. 

Finally, the function uses the _delete_message_ method to delete each message from the queue after it has been processed.

> Overall, SQS can be a useful tool for building applications that need to process large amounts of messages in a scalable, flexible, and reliable way.