使用AWS Lambda中的死信队列来保存未能被处理的消息并解决问题。创建一个SQS队列作为Lambda函数的死信队列,然后将其配置成函数的目标,当函数无法处理消息时,消息将被推送到死信队列。以下是一个代码示例:
import boto3
import json
def lambda_handler(event, context):
# Connect to SQS
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName='sqs_queue_name')
dead_letter_queue_arn = 'arn:aws:sqs:{region}:{account_id}:lambda_dead_letter_queue_name'
# Create Lambda dead letter queue if it doesn't exist
try:
response = sqs.create_queue(QueueName='lambda_dead_letter_queue_name')
dead_letter_queue_arn = response.attributes.get('QueueArn')
except:
dead_letter_queue_arn = 'arn:aws:sqs:{region}:{account_id}:lambda_dead_letter_queue_name'
# Process messages from SQS queue
for message in queue.receive_messages(MessageAttributeNames=['All']):
try:
# Process message
print(message.body)
except:
# Send message to dead letter queue on processing error
dead_letter_queue = sqs.Queue(dead_letter_queue_arn)
response = dead_letter_queue.send_message(MessageBody=message.body)
print("Message sent to dead letter queue: ",response['MessageId'])