Введение
Runnev — это потоковая передача событий по обычному HTTP. Поток — это упорядоченный надёжный
журнал, адресуемый по base62-идентификатору. Вы публикуете в него пакеты через POST
и вычитываете их обратно долгоживущим GET, который потоково отдаёт server-sent
events.
Ментальная модель
Один издатель дописывает пакеты в поток. Каждый пакет попадает под монотонно возрастающий номер (sequence). Любое число подписчиков читают поток независимо, каждый держит свой курсор — это просто номер последнего увиденного им пакета. Отключившийся подписчик переподключается со своим курсором и продолжает ровно с того места, где остановился.
publisher --POST /v1/streams/{id}/{seq}--> +------------- stream {id} -------------+
| ... 41821 41822 41823 41824(head)|
+---+-------------+--------------+-----+
GET (Accept: text/event-stream), each at its own cursor |
| | | |
sub A sub B sub C sub D
cursor 41824 cursor 41822 cursor 40010 cursor head
Это вся модель. Нет обменника, нет ключа маршрутизации, нет группы потребителей, которую нужно настраивать. Поток — это журнал; издатели пишут в его голову; читатели двигают курсор вперёд.
Когда использовать Runnev
Runnev подходит, когда нужно передать упорядоченный поток событий через сеть, которую вы не полностью контролируете:
- Разослать доменные события (заказы, задачи, телеметрию) нескольким независимым читателям.
- Доставлять живые обновления в браузеры, мобильные приложения или serverless-функции, которые не могут держать сырой сокет.
- Связать бэкенд с воркерами, которые приходят и уходят и должны возобновляться, не теряя своё место.
- Гнать firehose в аналитический приёмник, который иногда отстаёт и догоняет с курсора.
Когда не стоит его использовать
Это неподходящий инструмент, когда вам нужна семантика очереди:
- Подтверждение каждого сообщения и повторная доставка конкретному воркеру. У Runnev нет подтверждений на потребителя. Используйте очередь задач.
- Конкурирующие потребители, каждый из которых забирает свой кусок работы из одной общей очереди. Runnev доставляет весь поток каждому подписчику.
- Строгая обработка exactly-once без дедупликации на вашей стороне. Runnev — не менее одного раза с идемпотентными записями; дедупликация — это проверка в одну строку, но это ваша проверка.
Четыре операции
| Вы хотите | Вы вызываете | Документация |
|---|---|---|
| Создать поток | POST /v1/streams | Потоки |
| Дописать пакет | POST /v1/streams/{id}/{seq} | Публикация |
| Читать поток | GET /v1/streams/{id} | Подписка |
| Повторить один пакет | GET /v1/streams/{id}/batches/{seq} | Справочник API |
Впервые здесь? Быстрый старт проведёт вас от нуля до работающего подписчика за несколько минут.