Web*_*ube 10 python amazon-sqs amazon-web-services
我有一个需要第三方的简单任务。当请求到来时,我将其推送到队列中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)
Run Code Online (Sandbox Code Playgroud)
Mat*_*gan -4
根据AWS SDK 文档,如果您使用官方 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')
Run Code Online (Sandbox Code Playgroud)