的解決方案是散落各處。 您可以通過SQS Dead Letter queue setup閱讀並參考我的示例。您無需編碼即可使用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只訪問文字字符串,而不是字典。但是,正如doucumentation所指出的那樣,您需要在其中放入「dictionary like」值並將其格式化爲字符串。您可以使用str(dict())將dict轉換爲字符串,爲了清晰讀取,我使用了python三引號引號。
你在問什麼,正是SQS所做的。您需要更具體地瞭解您遇到的問題。 –