Существует ли элегантный способ отправки сообщений в AWS SQS с задержкой видимости более 15 минут? - PullRequest
14 голосов
/ 08 декабря 2011

В Amazon Web Services их очереди позволяют отправлять сообщения с задержкой видимости до 15 минут. Что делать, если я не хочу, чтобы сообщения были видны в течение 6 месяцев?

Я пытаюсь найти элегантное решение проблемы опроса / толчка. Я могу написать код для опроса SQS (или базы данных) каждые несколько секунд, проверять сообщения, которые готовы быть видимыми, затем перемещать их в «видимую очередь» или что-то в этом роде. Хотелось бы, чтобы существовал более простой и надежный способ, чтобы сообщения становились видимыми в очередях в далеком будущем, и мне не приходилось постоянно беспокоиться о том, что мое приложение опроса работает идеально.

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

Приветствуются любые мысли или альтернативные деревья для изучения лая.

Спасибо!

Ответы [ 3 ]

8 голосов
/ 13 декабря 2011

Похоже, вы неправильно понимаете задержку видимости. Его цель - убедиться, что приложение опроса не вытягивает один и тот же элемент из очереди более одного раза.

Другими словами, когда элемент извлекается из очереди, он становится невидимым в течение заранее определенного периода времени (по умолчанию 30 секунд, макс. 15 минут) в случае, если система опроса имеет кластер машин, считывающих из очереди все сразу.

Вот соответствующая документация:

http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#AboutVT

... и предложение, которое относится, в частности, к моему комментарию:

"Сразу после того, как компонент получил сообщение, оно все еще находится в очереди. Однако вы не хотите, чтобы другие компоненты в системе снова получали и обрабатывали сообщение. Поэтому Amazon SQS блокирует их с тайм-аутом видимости, это период времени, в течение которого Amazon SQS не позволяет другим потребляющим компонентам получать и обрабатывать это сообщение. "

Вы должны иметь возможность использовать SQS для своих целей, поскольку вы можете оставлять элемент в очереди столько, сколько захотите.

7 голосов
/ 11 сентября 2017

7 лет спустя, и Amazon все еще не поддерживает нужную вам функцию!

Два способа заставить его работать:

  • имеют сообщения, содержащие целевую дату доставки в своих атрибутах message_attributes, и рабочие, использующие сообщения очереди, просто удаляют и воссоздают любое сообщение, которое используется до его цели, с задержкой = max (0, min (secs_until_target_datetime, 900)) ; это позволит вам эффективно планировать сообщение на любое произвольное время в будущем;

или

  • (немного реже и постоянно :) аналогично, если сообщение еще не должно быть обработано, пересоздайте его и измените его время ожидания видимости на timeout = max (0, min (secs_until_target_datetime, 43200))

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

3 голосов
/ 19 января 2019

С 2016-12-01 возможно прямое решение AWS: Функции шага AWS

Каждое выполнение может длиться / простаивать до одного года , сохранять состояние между переходами и не тратить деньги на ожидание.

...