Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Жизненный цикл
SqsBroker::new записывает конфигурацию, connect
загружает конфигурацию AWS, старт открывает задачу приёма на каждую очередь, а завершение работы
закрывает соединение.
Схема текстом
- Брокер: SqsBroker::new(); ConnectedSqsBroker; Closed = () сообщать нечего
- В AWS: Только конфигурация, без ввода-вывода; Конфигурация AWS, 25 с на попытку, клиенты SDK собраны; Каждая подписка: GetQueueUrl или CreateQueue, политика перенаправления, видимость, запуск задачи приёма; Публикация разрешает очередь или тему один раз и кеширует; Соединение помечено закрытым
- SqsBroker::new() → ConnectedSqsBroker: connect(self)
- ConnectedSqsBroker → Closed = () сообщать нечего: shutdown(self)
- Только конфигурация, без ввода-вывода → Конфигурация AWS, 25 с на попытку, клиенты SDK собраны
- Конфигурация AWS, 25 с на попытку, клиенты SDK собраны → Каждая подписка: GetQueueUrl или CreateQueue, политика перенаправления, видимость, запуск задачи приёма
- Каждая подписка: GetQueueUrl или CreateQueue, политика перенаправления, видимость, запуск задачи приёма → Публикация разрешает очередь или тему один раз и кеширует
- Публикация разрешает очередь или тему один раз и кеширует → Соединение помечено закрытым
- Издатель, переживший соединение, возвращает 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.