Что такое очередь недоставленных писем?

Очередь недоставленных писем (DLQ) – это особый тип очереди, где временно хранятся сообщения, которые программная система не может обработать из-за ошибок. Очереди сообщений – это программные компоненты, поддерживающие асинхронное взаимодействие в распределенной системе. Они обеспечивают обмен сообщениями между программными службами в любом объеме и не требуют постоянной доступности получателя сообщений. В очереди недоставленных писем специально хранятся ошибочные сообщения, которые не имеют адресата или не могут быть обработаны предполагаемым получателем.

Почему очереди недоставленных писем настолько важны?

Очереди недоставленных писем (DLQ) существуют наряду с обычными очередями сообщений. Они служат временным хранилищем сообщений с ошибками и сбоями. DLQ предотвращают переполнение исходной очереди необработанными сообщениями.

Например, рассмотрим программное обеспечение с обычной очередью сообщений и DLQ. Программное обеспечение использует обычную очередь для хранения сообщений, которые оно планирует отправить получателю. Если получатель не отвечает на отправленные сообщения или не обрабатывает их, программное обеспечение перемещает их в очередь незавершенных писем.

Сообщения попадают в конвейер DLQ по двум потенциальным причинам: ошибки в содержимом сообщений и изменения в системе получателя.

Содержимое ошибочного сообщения

Если переданное сообщение содержит ошибку, сообщение будет перенесено в DLQ. Причиной повреждения отправленных данных могут быть аппаратные, программные и сетевые условия. Например, аппаратные помехи немного изменяют часть информации во время передачи. Неожиданное повреждение данных может привести к тому, что получатель отклонит или проигнорирует сообщение.

Изменения в системе получателя

Также сообщение может быть перенесено в DLQ, если принимающее программное обеспечение претерпело изменения, о которых отправитель не знает. Например, вы можете попытаться обновить информацию о клиенте, отправив сообщение для CUST_ID_005. Однако получатель может не обработать входящее сообщение из-за удаления клиента из базы данных системы.

В чем преимущества очереди недоставленных писем?

Далее мы поговорим о преимуществах очередей недоставленных писем (DLQ).

Снижение затрат на связь

Обычные или стандартные очереди сообщений обрабатывают сообщения до истечения срока хранения. Это помогает обеспечить непрерывную обработку сообщений и минимизирует вероятность блокировки очереди.

Однако если ваша система обрабатывает тысячи сообщений, большое количество сообщений об ошибках увеличит накладные расходы на связь и создаст нагрузку на систему взаимодействия. Вместо того чтобы пытаться обрабатывать сообщения с ошибками до истечения срока их действия, лучше после нескольких попыток переместить их в очередь недоставленных писем. 

Улучшенное устранение неполадок

Если вы перенесете ошибочные сообщения в DLQ, это позволит разработчикам сосредоточиться на выявлении причин ошибок. Они смогут выяснить, почему получатель не смог обработать сообщения, применить исправления и предпринять новые попытки доставить сообщения.

Например, банковское программное обеспечение может ежедневно отправлять тысячи заявок на кредитные карты в свою серверную систему на одобрение. Оттуда серверная система получает приложения, но не может обработать их все из-за неполной информации. Вместо бесконечных попыток программное обеспечение переносит сообщения в DLQ до тех пор, пока ИТ-команда не решит проблему. Это позволяет системе обрабатывать и доставлять оставшиеся сообщения без проблем с производительностью. 

Когда следует использовать очередь недоставленных писем?

Если в системе возникли следующие проблемы, можно использовать очередь недоставленных писем (DLQ). 

Неупорядоченные очереди

Вы можете воспользоваться преимуществами DLQ, когда порядок сообщения не важен. Хотя DLQ помогают устранять некорректные операции передачи сообщений, вам следует продолжать отслеживать очереди и повторно отправлять неудачные сообщения. 

Очереди FIFO

Упорядочивание сообщений важно в очередях по принципу «первым получено – первым отправлено» (FIFO). Каждое сообщение должно быть обработано перед отправкой следующего сообщения. В очередях FIFO можно использовать очереди с неработающими письмами, но ваше решение DLQ также должно быть реализовано по модели FIFO.

В каких случаях не следует использовать очередь недоставленных писем?

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

Точно так же не следует использовать очередь недоставленных писем с очередью «первым получено – первым отправлено» (FIFO), если вы не хотите нарушать точный порядок сообщений или операций. Например, не используйте очередь недоставленных писем с инструкциями в списке решений по редактированию (EDL) для пакета для редактирования видео. В этом случае, изменяя порядок правок, вы изменяете контекст последующих правок.

Как работает очередь недоставленных писем?

По большей части очередь недоставленных писем (DLQ) работает, как обычная очередь сообщений. Он хранит недоставленные сообщения до тех пор, пока вы не обработаете их для выяснения причины ошибки.

Далее мы обсудим политику перенаправления для DLQ и способы переноса сообщений в DLQ и обратно.

Создание политики перенаправления

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

Например, если разработчик задал максимальное количество повторных попыток равным 1, система за одну попытку перенесет все недоставленные письма в DLQ. Некоторые проблемы доставки могут быть вызваны временной перегрузкой сети или проблемами программного обеспечения. В этом случае в DLQ поступает множество недоставленных сообщений. Для обеспечения баланса разработчики оптимизируют максимальное количество повторных попыток, чтобы программное обеспечение выполнило достаточное количество повторов перед перемещением сообщений в DLQ.

Перемещение сообщений в очередь недоставленных писем

Попытки доставки письма от отправителя получателю могут быть неудачными по нескольким причинам. 

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

Перемещение сообщений из очереди недоставленных писем

Когда сообщения попадают в очередь недоставленных писем, разработчики проверяют сообщения с ошибками, чтобы определить причины. Сообщения в DLQ могут содержать ценную информацию для предотвращения повторения подобных проблем в будущем. После анализа и устранения проблем разработчиками система перемещает сообщения из DLQ в исходную очередь. Это позволяет отправителю продолжить обработку сообщений. 

Как AWS может удовлетворить ваши требования к очередям недоставленных писем?

Amazon Simple Queue Service (Amazon SQS) обеспечивает подход к обмену сообщениями между распределенными системами с поддержкой масштабирования в любых размерах. Разработчики используют Amazon SQS для создания надежных веб-приложений с полностью управляемыми стандартными очередями и очередями «первым получено – первым отправлено» (FIFO).

Ниже перечислены другие преимущества Amazon SQS.

  • Amazon SQS позволяет системам создавать неограниченное количество очередей сообщений
  • Разработчики могут передавать сообщения в пакетном режиме для достижения экономической эффективности
  • Amazon SQS поддерживает блокировку сообщений, предотвращающую одновременную обработку одного сообщения несколькими компьютерами

Начните работу с Amazon Web Services (AWS), создав аккаунт AWS уже сегодня.

AWS: дальнейшие шаги

Зарегистрировать бесплатный аккаунт

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

Регистрация 
Начать разработку в консоли

Начните разработку в Консоли управления AWS.

Вход