#amazon-elastic-beanstalk
#amazon-эластичный-beanstalk
Вопрос:
Я выполняю длительные задания на уровне Beanstalk Worker. Я установил тайм-ауты VisibilityTimeout, inactivityTimeout и nginx на 10 часов — это работает так, как ожидалось. Значение ErrorVisibilityTimeout установлено на 30 секунд, так как я хочу, чтобы сообщения немедленно доставлялись повторно в случае сбоя обработки.
Однако при развертывании или в случае сбоя экземпляра и замены на Beanstalk ошибка VisibilityTimeout не учитывается, и сообщение остается в полете в течение 10 часов, когда оно действительно обрабатывается повторно.
Что я делаю не так? Как я могу добиться повторной доставки сообщения через 30 секунд после удаления / сбоя экземпляра?
Комментарии:
1. как вам удалось установить время ожидания nginx? Мои .ebextensions просто игнорируются; (
2. вместо этого используйте .platform
Ответ №1:
К сожалению, вы не можете изменить время ожидания сообщения в случае сбоя экземпляра. Это связано с тем, что ErrorVisibilityTimeout
параметр специфичен для EB. Это не свойство SQS. Таким образом, способ работы EB worker заключается в том, что демон SQS в экземпляре EB получит сообщение из очереди, а затем передаст его вашему приложению. В приложении возвращается http-код 200 OK, демон удалит сообщение из очереди.
Однако, если вашему приложению не удается обработать сообщение, демон возвращает сообщение в очередь. Это делается демоном с использованием ChangeMessageVisibility, чтобы уменьшить время ожидания видимости сообщения, чтобы оно снова быстро стало видимым, несмотря на время ожидания видимости по умолчанию 10 часов.
Поскольку экземпляр завершается сбоем или завершается, нет ничего, что могло бы вызвать ChangeMessageVisibility
уменьшение времени ожидания видимости, и сообщение остается в своем 10-часовом тайм-ауте по умолчанию.
Комментарии:
1. я думаю, еще один отличный выбор UX beanstalk: (грустно