Есть ли элегантный способ отправлять сообщения AWS SQS с задержкой видимости более 15 минут?

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

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

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

Любые мысли или альтернативные деревья для меня, чтобы исследовать лай, приветствуются.

Спасибо!

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

Двумя способами, с помощью которых вы можете работать, являются следующие:

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

или,

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

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