Как Amazon SQS уведомляет одного из моих "рабочих" серверов всякий раз, когда в очереди есть что-то?

Я следую этому руководству: http://boto.s3.amazonaws.com/sqs_tut.html

Когда есть что-то в очереди, как мне назначить одного из моих 20 работников для его обработки?

Я использую Python.

Ответы

Ответ 1

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

Служба SNS/Simple Notification Service, связанная с Amazon, может быть полезна для вас в этих усилиях. Когда вы добавили работу в очередь, вы можете отправить уведомление подписчикам.

См. также:

http://aws.amazon.com/sns/

Рекомендации по использованию Amazon SQS - Опрос очереди

Ответ 2

Это (сейчас) возможно с длинным опросом в очереди SQS.

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryReceiveMessage.html

Поддержка длинных опросов (целое число от 1 до 20) - продолжительность (в секундах), в которой вызов действия ReceiveMessage будет ждать, пока сообщение в очереди не включится в ответ, в противоположность возврату пустого ответа, если сообщение пока не доступен.

Если вы не укажете WaitTimeSeconds в запросе, атрибут очереди ReceiveMessageWaitTimeSeconds используется для определения того, как долго ждать.

Тип: Целое число от 0 до 20 (в секундах)

По умолчанию: ReceiveMessageWaitTimeSeconds очереди.

Ответ 3

Фактически, если вы не требуете низкой задержки, вы можете попробовать следующее:

Создайте будильник в облачном режиме в вашей очереди, например, сообщения, видимые или полученные сообщения > 0. В качестве действия вы отправите сообщение в тему sns, которая затем может отправить сообщение вашим сотрудникам через конечную точку http/s.

обычно этот тип подхода используется для автомасштабирования.

Ответ 4

Далее, чтобы указать на проблему с SQS - вы должны опросить новые уведомления, и существует нет гарантия того, что на каком-либо конкретном опросе вы получите событие, которое существует в очереди (это необходимо к избыточности их архитектуры). Это означает, что вам нужно учитывать возможность того, что ваш опрос не вернул сообщение, которое существовало (что для меня означало, что мне нужно увеличить скорость голосования).

В целом я обнаружил слишком много ограничений в SQS (как я нашел с некоторыми другими инструментами AWS, такими как SimpleDB). Но это только мое мнение.