Search code examples
pythonamazon-web-servicesamazon-sqs

How to receive more than 1 message from an SQS queue in AWS?


I have a little problem receiving more than 1 message/line from my queue in AWS SQS.

Here is my code:

import boto3
import boto

AWS_ACCESS_KEY = '*****'
AWS_SECRET_ACCESS_KEY = '******'

sqs = boto3.resource('sqs', aws_access_key_id=AWS_ACCESS_KEY,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
    region_name='us-east-2'
)

queue_name = 'Messages.fifo'
queue = sqs.get_queue_by_name(QueueName=queue_name)
messages = queue.receive_messages()


for message in messages:
    print('Body: {0}'.format(message.body))

Any Help would be much appreciated as to why. Thanks!


Solution

  • The receive_messages() function takes a MaxNumberOfMessages parameter that defaults to 1 message. Therefore, you will need to ask for more messages.

    However, the receive_messages() documentation states:

    MaxNumberOfMessages (integer) -- The maximum number of messages to return. Amazon SQS never returns more messages than this value (however, fewer messages might be returned). Valid values are 1 to 10. Default is 1.

    Therefore, you might not receive the full quantity of messages on each call.


    Example:

    import boto3
    
    sqs = boto3.resource('sqs')
    queue = sqs.get_queue_by_name(QueueName='my-queue-name')
    messages = queue.receive_messages(MaxNumberOfMessages=10)
    for message in messages:
        print(message.body)
        message.delete()