SQS 在 Lambda 收到消息后自动删除消息

SQS deleting automatically messages after receiving them by Lambda

我有一个触发 Lambda 函数的 SQS。 Lambda 函数只是接收消息并将其放入 DynamoDB。

它工作正常,但问题是我注意到消息已从 SQS 中删除,而无需在我的代码中添加 delete() 语句。

但是在代码中明确提到了消息应该由消费者手动删除,否则它会重新放入SQS。

这是怎么回事?

我想处理进程出现问题的情况,在这种情况下,消息应该再次出现在 SQS 中,以便另一个 Lambda 可以尝试处理它。

这是我的 Lambda 代码:

import json
import time
import boto3

def lambda_handler(event, context):

message_id = event['Records'][0]['messageId']
message_receipt_handle = event['Records'][0]['receiptHandle']
message_body = event['Records'][0]['body']
print('Message received :')
print(message_body)
print('Processing message ...')

dynamo_db = boto3.client('dynamodb')
response_db = dynamo_db.put_item(
TableName='sqs-test-sbx',
Item={
'id': {
'S': message_id,
},
'Message': {
'S': message_body,
}
}
)
print('dynamodb response :')
print(response_db)

# Simulate a proceesing ...
time.sleep(10)

print('Message processed')

return {
'statusCode': 200,
'message_id': message_id,
'message_body': message_body,
'event': json.dumps(event)
}

这是正常行为,当您直接从 SQS 触发 lambda 时

https://docs.aws.amazon.com/en_gb/lambda/latest/dg/with-sqs.html

When your function successfully processes a batch, Lambda deletes its messages from the queue.

您需要删除消息,当您自己从SQS 中获取消息时,例如从EC2 实例中获取消息。