SQS在Lambda收到邮件后自动删除邮件

时间:2019-08-12 11:18:09

标签: amazon-web-services amazon-sqs

我有一个触发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)
}

1 个答案:

答案 0 :(得分:2)

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

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

  

当函数成功处理批处理时,Lambda会删除其批处理   队列中的邮件。

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