溶液四处散落。您可以通读SQS 死信队列设置并参考我的示例。您无需编码即可使用 AWS SQS 控制台执行完全相同的操作。
import boto3
sqs = boto3.client("sqs")
# I want to "lock" my queue for 5 minutes to allow my process have time to
# complete the task and delete the message afterwards.
response = sqs.create_queue(
QueueName="foo",
Attributes= {
"VisibilityTimeout" : "300"
}
)
# create a queue to store the "dead letter message"
dlq_response = sqs.create_queue(
QueueName="dlq-foo",
Attributes= {
"VisibilityTimeout" : "300"
}
)
queue_url = response["QueueUrl"]
# Attach RedrivePolicy to drive message to dead letter queue
# I want to make sure the message only read 1 time. Assume the program crash
# if it is not deleted.
# deadLetterTargetArn : You must specify the queue exact region name,
# exact Account name(replace 1234567890) and your dead letter queue name dlq-foo
sqs.set_queue_attributes(
QueueUrl = queue_url,
Attributes = {
"RedrivePolicy" : """{
"maxReceiveCount" : "1" ,
"deadLetterTargetArn" : "arn:aws:sqs:<region-name>:1234567890:dlq-foo"
}"""
}
)
注意:RedrivePolicy 只访问文字字符串,而不是字典。但是,正如文档指出的那样,您需要将“字典之类”的值放在那里并将其格式化为字符串。您可以使用 str(dict()) 将 dict 转换为 string ,我使用 python 三引号引号来阅读清晰。