Почему ApproximateAgeOfOldestMessage в SQS не превышает 5 минут - PullRequest
0 голосов
/ 26 ноября 2018

Я использую обмен сообщениями Spring Cloud AWS (2.0.1.RELEASE) в Java для использования из очереди SQS.Если это уместно, мы используем настройки по умолчанию, java 10 и весеннее облако Finchley.SR2,

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

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

К сожалению, при наблюдении этой метрики я вижу это:

enter image description here

Максимальный возраст не превышает 5 минут (несмотря ная знал, что это было несколько дней).Если сообщение стареет каждый раз, когда происходит получение, при условии, что подтверждение не приходит и сообщение не удаляется - но вместо этого становится снова доступным после истечения времени ожидания видимости, если этот график не будет намного выше?

Я не знаю, является ли это чем-то специфическим для способа, которым весенние облачные сообщения AWS потребляют сообщение, или является ли это общей причудой SQS, но я ожидал, что, если сообщение было помещено в очередь 5 дней назад, и потребительесли сообщение не было успешно использовано, то максимальный возраст будет 5 дней?

Действительно ли так, что если сообщение получено потребителем, но не удалено окончательно, то максимальный возраст - это фактически длина между вызовами потребителя?

Может ли кто-нибудь подтвердить, неверно ли моё ожидание, то есть именно так и должен вести себя SQS (он не учитывает возраст как длительность времени, прошедшего с того момента, как сообщение было впервые помещено в очередь, новместо этого считает, что это время между полученными звонками?

1 Ответ

0 голосов
/ 27 ноября 2018

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

Чтобы получить полезную тревогу для этой проблемы, я бы предложил установить очередь недоставленных сообщений (где сообщения автоматически доставляются после настраиваемого числа потреблений без удалений) и предупреждение о размере очереди недоставленных писем (ApproximateNumberOfMessagesVisible).

...