1

I'm learning AWS SQS and I've sent 1 messages to a FIFO queue. But when I try to receive messages, I cant get meesage. What is my mistake?

Senders code (lambda-function)

        XURL=quote(URL)
        client = boto3.client('sqs')
        url_fifo = 'https://sqs.xxxxxx.com/xxxxxx/que.fifo'
        now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        response = client.send_message(
            QueueUrl=url_fifo,
            
            MessageBody=f'URL: {XURL}, EventTime: {now}',
            MessageDeduplicationId=str(time.time_ns()),
            MessageGroupId='Group1'
        )

Receivers code (lambda-function)

    name = 'que.fifo'
    sqs = boto3.resource('sqs')
    url_fifo = 'https://sqs.xxxxxx.amazonaws.com/xxxxxxx/que.fifo'
    queue = sqs.get_queue_by_name(QueueName=name)
    msg_list = queue.receive_messages(QueueUrl=url_fifo, MaxNumberOfMessages=1)
    print(msg_list)

    if msg_list:
        for message in msg_list:
            print(message.body)
            URL=message.body
            message.delete()
    else:
        print("no message")

result log

2023-02-07T13:47:50.326+09:00   []
2023-02-07T13:47:50.326+09:00   no message
dlis168
  • 21
  • 7

1 Answers1

2

You are calling the Queue object receive_messages method, but passing parameters expected by the client object receive_message method. Check out the two hyperlinks, I have linked them accordingly to different sections in the documentation.

Therefore, your code should be

client = boto3.client('sqs')
url_fifo = 'https://sqs.xxxxxx.amazonaws.com/xxxxxxx/que.fifo'
msg_list = client.receive_message(QueueUrl=url_fifo, MaxNumberOfMessages=1)

Register Sole
  • 3,206
  • 1
  • 14
  • 22