Перейти к содержанию

Tutorial: первый сквозной поток

Цель — на живой шине самому провести факт через всю систему и увидеть результат. Это обучающий проход: делаешь шаги по порядку, в конце понимаешь, как устроен поток.

Что произойдёт:

ты публикуешь        bridge        Inngest         функция        bridge
transcript.ready.v1 ──IN──▶ заводит ──▶ transcript-process ──▶ /publish ──▶ transcript.processed.v1

Что понадобится

  • Поднятый стек bus (см. как задеплоить).
  • Пароль внутреннего пользователя шины NATS_INTERNAL_PASSWORD.
  • Доступ к серверу (терминал Coolify) или внешний wss-эндпойнт шины.

В примерах используем nats CLI из образа natsio/nats-box по внутренней сети event-bus. Зададим пароль один раз:

P=<NATS_INTERNAL_PASSWORD>
N() { docker run --rm --network event-bus natsio/nats-box \
      nats -s nats://nats:4222 --user internal --password "$P" "$@"; }

Шаг 1. Убедись, что стрим есть

Стрим TRANSCRIPT (subjects transcript.>) создаётся как код (stream-bootstrap):

N stream info TRANSCRIPT
Видишь конфиг стрима — значит шина готова.

Шаг 2. Опубликуй факт

N pub transcript.ready.v1 \
  '{"transcriptId":"hello-1","meetingId":"m1","createdAt":"2026-01-01T00:00:00Z"}' \
  -H 'traceparent:00-11111111111111111111111111111111-2222222222222222-01'
Что сейчас случилось: факт лёг в стрим, мост-консьюмер bridge-inngest забрал его и завёл в Event API движка (с детерминированным id и тем же traceparent).

Шаг 3. Дай движку отработать (≈10–15 c)

Функция transcript-process сработала на событие, выполнила шаг обработки и отправила результат в мост (/publish), а тот опубликовал новый факт.

Шаг 4. Посмотри результат

N stream get TRANSCRIPT --last-for transcript.processed.v1
Увидишь payload с "transcriptId":"hello-1" и summary — это и есть результат, вернувшийся в шину как новый факт. traceparent сохранён сквозь весь путь.

Что ты узнал

  • Факт публикуется в шину, а не вызывается напрямую — реагируют независимые участники.
  • Мост — единственный клей к движку: заводит факт внутрь и публикует результат обратно.
  • traceparent проходит весь цикл (его можно увидеть в Jaeger — наблюдаемость).

Дальше