Как 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). Но это только мое мнение.
Ответ 5
В настоящее время существует оболочка JMS для SQS от Amazon, которая позволит создавать слушатели, которые автоматически запускаются, когда доступно новое сообщение.
http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/jmsclient.html#jmsclient-gsg