如何在不编写代码的情况下在amazon sqs中实现指数退避

时间:2018-01-07 14:25:52

标签: python amazon-web-services amazon-sqs

我有一个需要第三方的简单任务。 当请求到来时,我将其推送到amazon sqs队列,将其拉入工作人员并调用3rd party。如果超时,我想实现一个指数退避(再试2秒,然后4然后8,然后......) 最大重试次数。

使用pythonboto -> 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)

2 个答案:

答案 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/