Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Устройство
Где стоит ruststream-sea-file: между рантаймом RustStream и двумя клиентами sea-streamer, один
столбец для файла потока и один для канала.
Схема текстом
- Ваш сервис: #[subscriber] обработчики-подписчики; RustStream::new(..) .with_broker(..)
- Ядро RustStream: Рантайм: диспетчер, кодек, завершение, повторы
- ruststream-sea-file: FileSubscriber управляющая задача; StdioSubscriber задача чтения; FilePublisher; StdioPublisher; FileBroker ConnectedFileBroker; StdioBroker ConnectedStdioBroker; Конверт заголовков заголовки внутри полезной нагрузки
- Клиенты sea-streamer: sea-streamer-file; sea-streamer-stdio
- #[subscriber] обработчики-подписчики → Рантайм: диспетчер, кодек, завершение, повторы: монтируются
- Рантайм: диспетчер, кодек, завершение, повторы → FileSubscriber управляющая задача: опрашивает поток
- Рантайм: диспетчер, кодек, завершение, повторы → StdioSubscriber задача чтения
- FileSubscriber управляющая задача → sea-streamer-file
- StdioSubscriber задача чтения → sea-streamer-stdio
- sea-streamer-file → Файл .ss на диске
- sea-streamer-stdio → stdin и stdout
- Под testing транспортом брокера может быть файл или канал в памяти вместо клиента
Крейт реализует трейты брокера из ядра поверх двух клиентов
sea-streamer: sea-streamer-file для файла потока и
sea-streamer-stdio для стандартного ввода и вывода процесса. Рантайм над ним один для всех
брокеров. Всё, что относится к файлу или каналу, лежит в этом крейте:
дескриптор, позиции и
перемотка, смысл ack,
адрес копии для повтора и передача заголовков.
Подключённый брокер держит одну связь со своим транспортом. Для файла это стример клиента, один
продюсер, через который дописывает каждая публикация, и рантайм, на котором выполнился connect.
Для stdio это стример клиента и тот же рантайм. Все клоны брокера делят одну связь. Поэтому
брокер, подключённый дважды, подключается один раз, а издатель, выданный до подключения, находит
связь при первой публикации.
Каждая задача соединения выполняется на рантайме, на котором выполнился connect. Поэтому
подписка, открытая из другого рантайма, продолжает доставлять сообщения после остановки того
рантайма.
Файловая подписка - это управляющая задача, которая владеет консьюмером клиента. Перемотке клиента консьюмер нужен в единоличное пользование, и прервать её нельзя. Подписка stdio - это задача чтения. Обе передают сообщения через очередь на 64 места, а оба клиента читают по одному сообщению, поэтому пакет собирает крейт. Неполный пакет уходит через 10 миллисекунд после своего первого сообщения.
Ни один транспорт не принимает настроек на сообщение, поэтому у публикации нет параметров. Клиенты принимают полезную нагрузку без заголовков, поэтому заголовки передаются внутри полезной нагрузки, в конверте.
Как части запускаются и останавливаются, показывает страница Жизненный цикл, а путь одного сообщения - страница Путь.