是的,AWS SQS支持自动重新发送死信队列中的消息。我们可以通过配置队列的属性来实现。具体可以通过以下步骤完成:
import boto3
# 创建SQS客户端
sqs = boto3.client('sqs')
# 创建主队列
response = sqs.create_queue(QueueName='myQueue')
# 创建死信队列
response = sqs.create_queue(QueueName='myQueue_dead_letter',
Attributes={
'MessageRetentionPeriod': '86400',
'VisibilityTimeout': '30'
})
# 将主队列关联到死信队列
queue_arn = sqs.get_queue_attributes(QueueUrl='myQueue')['Attributes']['QueueArn']
dead_letter_arn = sqs.get_queue_attributes(QueueUrl='myQueue_dead_letter')['Attributes']['QueueArn']
policy = {
"deadLetterTargetArn": dead_letter_arn,
"maxReceiveCount": "5"
}
sqs.set_queue_attributes(QueueUrl='myQueue', Attributes={'RedrivePolicy': json.dumps(policy)})
sqs.set_queue_attributes(
QueueUrl='myQueue',
Attributes={
'ReceiveMessageWaitTimeSeconds': '20',
'VisibilityTimeout': '30',
'RedrivePolicy': json.dumps({
'deadLetterTargetArn': dead_letter_arn,
'maxReceiveCount': '5'
}),
'Policy': json.dumps({
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Principal': '*',
'Action': 'sqs:SendMessage',
'Resource': queue_arn,
'Condition': {
'ForAllValues:StringEquals': {
'aws:SourceArn': dead_letter_arn
}
}
}
]
}),
'MessageRetentionPeriod': '86400'
}
)
以上代码均为Python示例,可以根据需要进行更改和适配。