amazon-web-services - SQS 收到消息后自动删除 Lambda

标签 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)
}

最佳答案

这是正常行为,当您直接从 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 实例实例化时,您需要删除该消息。

关于amazon-web-services - SQS 收到消息后自动删除 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460190/

相关文章:

JavaScript 代码在 AWS EC2 实例上失败

javascript - 我应该将 Cognito 用户池与其他社交 IDPS 联合起来,还是通过用户池本身进行社交登录

html - 如何从 AWS Lambda 检索数据并将其显示在托管在 AWS S3 上的静态网站上?

c# - 跨账户访问 DynamoDb 表 C#

java - 在 Java 中运行内存中的 elasticMQ

amazon-web-services - 通过AWS Amplify和ElasticSearch查找地理位置和其他字段

amazon-web-services - 由于 VPC 问题,EC2 实例创建失败

python - 使用 boto 连接到 Amazon SQS

c# - 从 Amazon SQS 检索消息属性名称

amazon-web-services - Amazon SQS 如何控制重试次数