Как долго опрашивать сервис amazon sqs, используя boto? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть очередь sqs на amazon, которую опрашивают несколько потребителей.

Недавно я обнаружил, что numberofEmptyReceives находится в 10 миллионах, это означает, что с меня взимают плату за этот запрос.

Ниже показано, как я получаю сообщение

while True:
    for message in queue.receive_messages(AttributeNames=['All'], MaxNumberOfMessages=10):

Я знаю, что есть опция WaitTimeSeconds, но документация предполагает, что она не делает длинный опрос

Продолжительность (в секундах), в течение которой вызов ожидает поступления сообщения в очередь, прежде чем вернуться.Если сообщение доступно, вызов возвращается раньше, чем WaitTimeSeconds.Если сообщения недоступны и время ожидания истекает, вызов успешно возвращается с пустым списком сообщений.

В частности

Если сообщение доступно, вызов возвращаетсяраньше, чем WaitTimeSeconds.

Из вышеприведенного предложения кажется, что boto3 все еще вызывает sqs, чтобы проверить, есть ли сообщение или нет.

Как правильно вести длинный опрос с использованием boto3чтобы избежать получения оплаты за запрос?

Это так же просто, как установка thread.sleep?

Я также не могу найти исходный код на github

1 Ответ

0 голосов
/ 28 мая 2018

Просто отправьте параметр WaitTimeSeconds (максимум до 20 секунд) в вашем вызове receive_message.Из документации AWS:

# Long poll for message on provided SQS queue
response = sqs.receive_message(
    QueueUrl=queue_url,
    AttributeNames=[
        'SentTimestamp'
    ],
    MaxNumberOfMessages=1,
    MessageAttributeNames=[
        'All'
    ],
    WaitTimeSeconds=20
)

Если в очереди нет сообщений, то вызов будет ждать до WaitTimeSeconds для появления сообщения.Если сообщение появляется до истечения времени, вызов немедленно вернет это сообщение.

Подробнее см. Включение длительного опроса в Amazon SQS .

Вы быпо-прежнему будет взиматься плата за длинный опрос.Экономия затрат заключается в выполнении одного оплачиваемого действия SQS и ожидании времени ожидания длинного опроса, в противном случае вам, возможно, пришлось бы выполнить два или три или более оплачиваемых действия за один и тот же период.

...