我有一个需要第三方的简单任务。
当请求到来时,我将其推送到amazon sqs
队列,将其拉入工作人员并调用3rd party
。如果超时,我想实现一个指数退避(再试2秒,然后4然后8,然后......)
最大重试次数。
使用python
,boto -> sqs
我已经查找了内置参数,允许我使用尽可能少的代码(理想情况下,根本没有代码)。
像
这样的东西from boto import sqs
def handle_message(message):
try:
# send a post to api
except TimeOut, err:
# send_back_to_itself in 2/4/8 sec
if delay < DELAY_LIMIT:
queue.write(message, delay=secs)
答案 0 :(得分:5)
根据AWS SDK docs,如果您使用的是官方SDK库,则可免费获得指数退避。因此,您需要做的就是设置max_attempts
计数,第一次尝试后的所有内容都会以指数方式退回:
import boto3
from botocore.config import Config
config = Config(
retries = dict(
max_attempts = 10 # docs say default is 5
)
)
sqs = boto3.client('sqs', config=config)
sqs.receive_message(QueueUrl='https://sqs.us-east-1.amazonaws.com/<your-account-num>/foobar')
答案 1 :(得分:0)
我认为,到 2021 年夏天,“根本没有代码”是不可能的。但是有一篇很棒的博客文章介绍了如何使用编码示例来做到这一点https://aws.amazon.com/blogs/compute/using-amazon-sqs-dead-letter-queues-to-replay-messages/