Перейти к основному содержимому
Нормативная версия документации - английская

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

Жизненный цикл

SqsBroker::new записывает конфигурацию, connect загружает конфигурацию AWS, старт открывает задачу приёма на каждую очередь, а завершение работы закрывает соединение.

Состояния брокера как типы и то, что каждый переход делает в AWSБрокерВ AWSSqsBroker::new()ConnectedSqsBrokerClosed = ()сообщать нечегоТолько конфигурация,без ввода-выводаКонфигурация AWS,25 с на попытку,клиенты SDK собраныКаждая подписка:GetQueueUrl илиCreateQueue, политикаперенаправления,видимость, запускзадачи приёмаПубликация разрешаеточередь или темуодин раз и кешируетСоединениепомечено закрытымИздатель, переживший соединение, возвращаетSqsError::NotConnected, а не молчаливый успех
Схема текстом
  1. Брокер: SqsBroker::new(); ConnectedSqsBroker; Closed = () сообщать нечего
  2. В AWS: Только конфигурация, без ввода-вывода; Конфигурация AWS, 25 с на попытку, клиенты SDK собраны; Каждая подписка: GetQueueUrl или CreateQueue, политика перенаправления, видимость, запуск задачи приёма; Публикация разрешает очередь или тему один раз и кеширует; Соединение помечено закрытым
  3. SqsBroker::new() → ConnectedSqsBroker: connect(self)
  4. ConnectedSqsBroker → Closed = () сообщать нечего: shutdown(self)
  5. Только конфигурация, без ввода-вывода → Конфигурация AWS, 25 с на попытку, клиенты SDK собраны
  6. Конфигурация AWS, 25 с на попытку, клиенты SDK собраны → Каждая подписка: GetQueueUrl или CreateQueue, политика перенаправления, видимость, запуск задачи приёма
  7. Каждая подписка: GetQueueUrl или CreateQueue, политика перенаправления, видимость, запуск задачи приёма → Публикация разрешает очередь или тему один раз и кеширует
  8. Публикация разрешает очередь или тему один раз и кеширует → Соединение помечено закрытым
  9. Издатель, переживший соединение, возвращает SqsError::NotConnected, а не молчаливый успех

new, endpoint, region, test_credentials и from_config не выполняют ввода-вывода, поэтому билдер сервиса остаётся синхронным. Копия брокера разделяет с ним соединение: так хук старта получает соединение, которое открыл рантайм. Рантайм подключает брокер при старте приложения.

Подключение загружает конфигурацию AWS через цепочку SDK по умолчанию, с конечной точкой и регионом, которые называет брокер, и задаёт тайм-аут 25 секунд на попытку, больше 20-секундного длинного опроса. Брокер из from_config сохраняет свой SdkConfig вместе с тайм-аутами, кроме конечной точки и региона, которые называет брокер. Затем подключение собирает клиенты SDK. Учётные данные SDK получает лениво, при первом запросе. В сервисе этот запрос - GetQueueUrl первой подписки, поэтому с неверными учётными данными старт прерывается на подписке.

Сначала проверяется SqsQueue каждой подписки: пустое имя, ожидание дольше 20 секунд или видимость вне диапазона от одной секунды до 12 часов дают ошибку SqsError::InvalidQueue ещё до обращения к AWS. Затем подписка получает адрес очереди или, при create_if_missing, создаёт очередь. Она записывает политику перенаправления, когда регистрация объявляет max_attempts и dead_letter. Если дескриптор не называет тайм-аут видимости, она читает собственный тайм-аут очереди. Затем она запускает задачу приёма.

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

Завершение работы помечает соединение закрытым и возвращает (): клиентам SDK нечего закрывать и нечего сбрасывать. Издатель, созданный до завершения работы, после него возвращает SqsError::NotConnected.