У меня есть очередь Amazon SQS и очередь недоставленных сообщений.
Моя программа на python получает сообщение из очереди SQS, а затем, в случае возникновения исключения, отправляет сообщение в очередь недоставленных сообщений..
Теперь у меня есть программа, которая проверяет очередь недоставленных сообщений, если эти сообщения еще можно обработать.Если это так, он будет отправлен обратно в основную очередь SQS.Видите ли, в моем тестировании я ожидаю бесконечный цикл изменений, но, очевидно, сообщение исчезает после 2 попыток.Почему это так?
Когда я добавляю в сообщение дополнительное поле (что является случайным значением), оно как-то делает то, что я ожидаю (бесконечный цикл отправки туда и обратно).Есть ли механизм в SQS, который предотвращает то, что я делаю, когда сообщение одно и то же?
def handle_retrieved_messages(self):
if not self._messages:
return None
for message in self._messages:
try:
logger.info(
"Processing Dead Letter message: {}".format(
message.get("Body")
)
)
message_body = self._convert_json_to_dict(message.get("Body"))
reprocessed = self._process_message(
message_body, None, message_body
)
except Exception as e:
logger.exception(
"Failed to process the following SQS message:\n"
"Message Body: {}\n"
"Error: {}".format(message.get("Body", "<empty body>"), e)
)
# Send to error queue
self._delete_message(message)
self._sqs_sender.send_message(message_body)
else:
self._delete_message(message)
if not reprocessed:
# Send to error queue
self._sqs_sender.send_message(message_body)
self._process_message проверит, если для message_body установлен флаг reprocess, установленный в true.Если значение равно true, отправьте его обратно в основную очередь.
Теперь я создал сообщение с ошибкой, поэтому каждый раз, когда оно обрабатывается в главной очереди, оно переходит в тупик.И затем я ожидаю, что это будет продолжаться, но SQS, похоже, имеет механизм, чтобы предотвратить это (что хорошо).
Вопрос в том, что это за настройка?