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

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

Путь

Путь одного сообщения Pub/Sub через сервис RustStream: streaming pull, доставка, обработчик, ответ и ack.

Путь одного сообщения Pub/Sub, на которое отвечают: от streaming pull до его ackStreaming pullклиент берёт сообщение в арендуЗадача перекачкипередаёт в канал на 16 местPubSubMessageатрибуты - в заголовки, без копированияДиспетчеризацияодин цикл или воркерыДекодированиеиз данных сообщенияОбработчик подписчикаasync fn под #[subscriber]Ответкодируется в буфер и отдаётся с нимPubSubPublisherждёт идентификатор сообщенияЗавершениеack, nack или отложенная переобработкаAckуходит со следующим пакетом клиента
Схема текстом
  1. Streaming pull клиент берёт сообщение в аренду → Задача перекачки передаёт в канал на 16 мест
  2. Задача перекачки передаёт в канал на 16 мест → PubSubMessage атрибуты - в заголовки, без копирования
  3. PubSubMessage атрибуты - в заголовки, без копирования → Диспетчеризация один цикл или воркеры
  4. Диспетчеризация один цикл или воркеры → Декодирование из данных сообщения
  5. Декодирование из данных сообщения → Обработчик подписчика async fn под #[subscriber]
  6. Обработчик подписчика async fn под #[subscriber] → Ответ кодируется в буфер и отдаётся с ним
  7. Ответ кодируется в буфер и отдаётся с ним → PubSubPublisher ждёт идентификатор сообщения
  8. PubSubPublisher ждёт идентификатор сообщения → Завершение ack, nack или отложенная переобработка
  9. Завершение ack, nack или отложенная переобработка → Ack уходит со следующим пакетом клиента

Клиент снимает сообщение с потока и начинает его аренду. Задача перекачки без копирования оборачивает его в PubSubMessage: данные остаются буфером клиента, а атрибуты переходят в заголовки. Ключ упорядочивания становится заголовком partition-key, а счётчик попыток - заголовком pubsub-delivery-attempt, если у подписки есть политика dead-letter.

Ответ обработчика кодируется в буфер, который как есть становится данными исходящего сообщения, потому что клиент оставляет у себя байты, которые публикует. Заголовки становятся атрибутами. Заголовок не в UTF-8 приводит к ошибке публикации, потому что атрибут - это текст. Ключ, заданный для публикации, становится ключом упорядочивания сообщения, как показывает страница Порядок.

Издатель возвращает управление, когда Pub/Sub присвоил сообщению идентификатор. Если ответ не удалось опубликовать, доставка завершается переобработкой, и сообщение возвращается.

Доставка завершается после ответа. ack уходит со следующим пакетом подтверждений клиента, примерно через 100 миллисекунд. Чем становится каждый исход, показывает страница Завершение.