Очередь сообщений
In this article:
Очередь сообщений#
Сервис Очередь сообщений (Simple Queue Service, SQS) позволяет программным компонентам в облаке асинхронно обмениваться сообщениями без потерь. Благодаря распределённой архитектуре сервис обеспечивает надёжное хранение и высокую доступность множества сообщений.
Очередь функционирует как буфер, куда одни компоненты помещают сообщения, а другие их забирают для последующей обработки. На время обработки сообщения блокируются, так что одно и то же сообщение не может одновременно обрабатываться разными получателями.
SQS можно использовать с любыми программными компонентами, которые могут отправлять HTTPS-запросы или использовать AWS SDK.
Обзор SQS#
Система обмена сообщениями имеет распределённую архитектуру и состоит из трёх основных частей:
программные компоненты (отправители и получатели);
стандартная очередь;
сообщения в очереди.
Отправители (producer) передают сообщения в очередь, получатели (consumer) извлекают из их очереди для обработки. Для обеспечения избыточности каждое сообщение в очереди хранится на нескольких серверах SQS в разных зонах доступности (при наличии в регионе).
Жизненный цикл сообщения#
Жизненный цикл состоит из трёх этапов:
Отправитель передаёт сообщение в очередь. Сообщение сохраняется на нескольких серверах SQS.
Получатель запрашивает сообщение из очереди, когда готов к обработке. На время обработки сообщение блокируется: оно остаётся в очереди и недоступно другим получателям.
По завершении обработки получатель удаляет сообщение из очереди. Если сообщение не удалось обработать в отведённое время, например, из-за сбоя на получателе, то оно становится доступно для других получателей.
Стандартная очередь#
В К2 Облака реализован механизм стандартной очереди. Он позволяет гарантировать, что сообщение будет доставлено как минимум один раз. Однако в некоторых ситуациях, например из-за задержек в сети, сообщение может быть доставлено повторно. Это необходимо учитывать при разработке приложений, чтобы обработка повторных сообщений не приводила к изменению состояния системы.
Доставка сообщений по возможности осуществляется в том порядке, в каком они были отправлены. Однако в некоторых случаях сообщения могут поступать не по порядку, например, при восстановлении после сбоя. Если порядок обработки сообщений имеет значение, то в таких приложениях следует реализовать внутреннюю логику для упорядочивания сообщений.
Стандартная очередь способна обрабатывать множество вызовов методов API в секунду, таких как SendMessage, ReceiveMessage и DeleteMessage. Высокая пропускная способность делает её подходящей для задач, где требуется быстрая асинхронная обработка больших объёмов сообщений и где допустимы отклонения в порядке сообщений и наличие дубликатов:
асинхронная обработка фоновых задач, таких как отправка SMS, пушей, сообщений электронной почты;
буферизация при пиковых нагрузках, когда объём поступающих сообщений превышает возможности их обработки;
надёжная доставка сообщений при допустимости дубликатов (логирование, сбор метрик);
организация асинхронного обмена сообщениями между микросервисами и др.
Параметры очереди#
Вы можете настроить разные параметры для разных очередей сообщений.
Тайм-аут видимости — Период времени, в течение которого сообщение, запрошенное получателем, недоступно для других получателей. Такой механизм обеспечивает идемпотентность обработки при конкурентном доступе. Иначе говоря, он предотвращает одновременную обработку одного и того же сообщения несколькими получателями. Максимальный тайм-аут — 12 ч.
Задержка отправки — Этот параметр определяет, сколько секунд после его отправки новое сообщение в очереди должно оставаться невидимым для получателей. В результате сообщение становится доступным для обработки только спустя какое-то время после его поступления в очередь. Данный параметр можно задать как для всей очереди, так и для отдельного сообщения. Максимальная задержка — 20 с.
Время ожидания сообщения — Максимальная длительность ожидания сообщения после поступления запроса ReceiveMessage, когда очередь пуста. Если в очереди есть сообщения или сообщение поступит до окончания времени ожидания, то ответ будет отправлен немедленно. Если за заданное время сообщение не поступит, то будет отправлен пустой ответ. Данный механизм длительного опроса (Long Polling) позволяет снизить количество «холостых» запросов.
Срок хранения сообщений — Сообщения могут находиться в очереди до четырёх дней.
Максимальный размер сообщения — Размер сообщения не может превышать 1 МБ.
Маркер получения#
Удалить сообщение из очереди или изменить тайм-аут видимости может только его получатель.
При запросе вместе с сообщением получателю передаётся маркер получения (receipt handle). Он служит для идентификации запроса на получение сообщения, а не самого сообщения. Для удаления сообщения или изменения тайм-аута видимости необходимо передать актуальный маркер получения.
При каждом запросе сообщения передаётся новый маркер получения. Таким образом, чтобы удалить сообщения из очереди, необходимо передать последний полученный маркер до окончания текущего тайм-аута видимости.
Управление очередями и сообщениями#
Важно
Для автоматизации работы с очередями и сообщениями используйте SQS API.
Примечание
Для управления очередями и сообщениями пользователь должен иметь проектные привилегии SQSFullAccess. Такие привилегии есть, например, у администраторов в группе CloudAdministrators. При необходимости вы можете создать отдельного пользователя, добавить его в проект и назначить ему политику SQSFullAccess или включить в группу администраторов облака в этом проекте.
Управление очередями#
Создать очередь#
Перейдите в раздел Очередь сообщений Очереди.
Нажмите Создать.
В открывшемся окне задайте параметры очереди (см. подробнее раздел Параметры очереди).
имя очереди;
тайм-аут видимости;
задержку отправки сообщения;
время ожидания сообщения;
срок хранения сообщений;
максимальный размер сообщения.
После задания всех параметров нажмите Создать.
Изменить очередь#
Перейдите в раздел Очередь сообщений Очереди.
В таблице ресурсов выберите нужную очередь и нажмите Редактировать.
В открывшемся окне настройте новые параметры очереди (см. подробнее раздел Параметры очереди).
тайм-аут видимости;
задержку отправки сообщения;
время ожидания сообщения;
срок хранения сообщений;
максимальный размер сообщения.
После настройки всех параметров нажмите Сохранить.
Редактировать параметры очереди можно также на вкладке Информация на странице очереди.
Очистить очередь#
Важно
Из очереди будут удалены все сообщения, в том числе находящиеся в обработке.
Перейдите в раздел Очередь сообщений Очереди.
В таблице ресурсов выберите нужную очередь и нажмите Очистить очередь. Если эта кнопка не отображается, то откройте меню дополнительных действий (Eщё).
Подтвердите действие в открывшемся окне.
Очистить очередь можно также на вкладке Информация на странице очереди. Если необходимо удалить конкретные сообщения из очереди, воспользуйтесь инструкцией.
Удалить очередь#
Перейдите в раздел Очередь сообщений Очереди.
В таблице ресурсов выберите нужную очередь и нажмите Удалить.
Подтвердите действие в открывшемся окне.
Удалить очередь можно также на вкладке Информация на странице очереди.
Работа с сообщениями#
Отправить сообщение#
Перейдите в раздел Очередь сообщений Очереди.
Найдите нужную очередь в таблице ресурсов и нажмите на её имя для перехода на страницу очереди.
На вкладке Сообщения нажмите Отправить сообщение.
В открывшемся окне:
введите сообщение в поле Текст сообщения;
(опционально) измените задержку отправления, заданную по умолчанию.
Нажмите Отправить.
Опросить очередь#
Примечание
Если сообщений в очереди больше, чем значение N параметра Максимальное количество сообщений, то будет возвращено N самых старых сообщений. Если тайм-аут видимости меньше продолжительности опроса, то сообщения будут получены несколько раз за время опроса.
Перейдите в раздел Очередь сообщений Очереди.
Найдите нужную очередь в таблице ресурсов и нажмите на её имя для перехода на страницу очереди.
Откройте вкладку Сообщения и настройте параметры опроса, если необходимо:
длительность опроса (не более 30 сек);
максимальное количество запрашиваемых сообщений (не более 10).
Нажмите Опросить очередь.
Прогресс опроса отображается с помощью одноимённого индикатора.
Остановить опрос#
Опрос очереди можно прервать в любой момент.
Перейдите в раздел Очередь сообщений Очереди.
Найдите нужную очередь в таблице ресурсов и нажмите на её имя для перехода на страницу очереди.
На вкладке Сообщения нажмите Остановить опрос, чтобы прервать текущий опрос.
Получить информацию о сообщении#
Перейдите в раздел Очередь сообщений Очереди.
Найдите нужную очередь в таблице ресурсов и нажмите на её имя для перехода на страницу очереди.
На вкладке Сообщения выберите нужное сообщение в таблице ресурсов. В открывшемся окне будет выведена следующая информация о сообщении:
идентификатор;
дата и время отправки сообщения;
размер сообщения;
MD5-хеш сообщения.
Чтобы посмотреть текст сообщения, нажмите Показать.
Для закрытия окна с информацией о сообщении нажмите .
Удалить сообщение#
Примечание
Для удаления всех сообщений из очереди используйте кнопку Очистить.
Важно
Сообщение можно удалить из очереди только во время её опроса. Если очередь получит команду на удаление после окончания текущего тайм-аута видимости, сообщение не будет удалено из очереди (см. подробнее Маркер получения).
Перейдите в раздел Очередь сообщений Очереди.
Найдите нужную очередь в таблице ресурсов и нажмите на её имя для перехода на страницу очереди.
На вкладке Сообщения найдите сообщение, которое необходимо удалить.
Нажмите иконку в поле Действия.
Информация об очередях и сообщениях#
Общую информацию об очередях можно посмотреть в таблице ресурсов в разделе Очередь сообщений Очереди. Для просмотра детальной информации о конкретной очереди и находящихся в ней сообщениях найдите нужную очередь в таблице и нажмите на ссылку с её идентификатором. В результате откроется страница очереди.
На вкладке Информация отображаются данные об очереди:
тип очереди (пока поддерживается только один тип очереди — Стандартная);
URL, на который следует отправлять запросы к очереди;
ARN очереди;
время и дата создания очереди;
максимальный размер сообщения;
время и дата последнего обновления очереди;
срок хранения сообщений по умолчанию;
тайм-аут видимости по умолчанию;
задержка отправки сообщения по умолчанию;
время ожидания при запросе сообщений;
количество сообщений в очереди;
количество обрабатываемых сообщений;
количество сообщений, отправка которых была задержана.
Здесь вы можете изменить параметры очереди, очистить и удалить очередь.
На вкладке Сообщения отображается таблица ресурсов с общей информацией о сообщениях в очереди:
идентификатор сообщения;
дата и время отправки сообщения;
размер сообщения;
сколько раз было запрошено сообщение.
Кроме того, здесь вы можете посмотреть прогресс текущего опроса, изменить длительность опроса и максимальное количество возвращаемых сообщений.
Если необходимо узнать хеш сообщения и/или просмотреть его текст, воспользуйтесь инструкцией. Здесь вы можете также создать новое сообщение, опросить очередь и остановить текущий опрос, удалить выбранные сообщения.