AWS SQS: задержка предоставления доступа к сообщению, которое не удалось обработать
Вот мой сценарий:
- У меня есть очередь SQS, которая обрабатывает ряд задач. Эти задачи могут, и часто это не удается. Их провал является обычным и несколько ожидаемым.
- Когда задача не выполняется, я хочу повторить ее через определенное время, и после определенного количества попыток передать элемент в DLQ. Я не хочу повторять попытку немедленно.
У меня есть рабочее приложение EB, которое обрабатывает эти задачи. Когда это удается, я возвращаю 200 (и задача успешно удаляется из очереди). Когда это не удается, я возвращаю 404, и задача немедленно возвращается в очередь (и, таким образом, немедленно повторяется). Это нежелательно, я хотел бы отложить этот неудачный элемент, прежде чем он будет повторен.
Возможно ли это сделать с помощью комбинации тайм-аутов видимости и очередей задержки?
2 ответа
Ответил на мой собственный вопрос, оказалось, что я искал не в том месте (параметры конфигурации SQS, а не параметры конфигурации EB). Волшебные настройки, которые я искал, это "время ожидания ошибки" в параметрах конфигурации EB, которое позволяет вам контролировать количество времени, в течение которого отказавший элемент перед возвращением в свою очередь.
Вы можете сделать это непосредственно с SQS, вызвав ChangeMessageVisibility для сообщения, которое вы только что не смогли обработать, и установив VisibilityTimeout на то, что вы хотите: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html