2010-11-14 4 views

ответ

11

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

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

Смотрите также:

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

Best practices for using Amazon SQS - Polling the queue

+3

SQS теперь начал длительный опрос.поэтому он уменьшает ваши вызовы до SQS – ankitjaininfo

6

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

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

+0

Есть ли у вас какие-либо ссылки на документы AWS, в которых упоминается проблема получения событий, которые не находятся в очереди? –

+0

Проблема заключается в опросе для события, когда ему сообщают, что там нет сообщения, но на самом деле это один. Не то, чтобы вы получали сообщения, которые не находятся в очереди. Но после вашего таймаута видимости другие участники будут видеть сообщения, которые вы потенциально обрабатываете, поэтому сообщение может обрабатываться дважды, если вы не обработаете его в течение таймаута видимости. –

+2

Это не проблема с SQS, хотя это проблема приложения. Если он длительный, вы должны увеличить тайм-аут видимости во время процесса. –

8

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

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

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

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

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

Default: ReceiveMessageWaitTimeSeconds из очереди.

7

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

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

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

Смежные вопросы