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

How-to: добавить участника

Цель — подключить новый сервис к шине так, чтобы это была рутина, а не хирургия. Контракт раньше кода (CLAUDE.md). Участник обязан соблюдать контракт участника.

1. Опиши контракт (PR в contracts/)

Если участник публикует новый факт — сначала добавь его в контракт: - subject по именованию (сущность.событие.vN); - JSON Schema в contracts/schemas/; - канал + операцию в contracts/asyncapi.yaml.

Подробнее — изменить контракт. CI-ворота проверят схемы и каталог.

2. Выбери рантайм участника

По ADR 0002:

Что делает участник Бери
Код на Go templates/participant-go
Код на TypeScript templates/participant-ts
Декларативный глю/трансформация (без кода) templates/participant-benthos
Внутренние тулзы/UI/human-in-loop Windmill (stacks/windmill)
Тяжёлый/эластичный компьют Python-участник + Modal

3. Скопируй шаблон и впиши логику

Например, Go:

cp -r templates/participant-go services/my-participant
В main.go замени process() на свою обработку. Обвязка (durable-консьюмер, ack-после-успеха, идемпотентность, traceparent, валидация) уже в bus.go — её трогать не нужно.

4. Заведи креды и допуск

  • Сгенерируй пароль участника, положи в Infisical (секреты).
  • Добавь юзера с allow-list на его subject'ы в stacks/bus/nats/nats-server.conf (см. доступ). Контракт = ворота и в рантайме.

5. Задеплой

Отдельный ресурс Coolify (как), сеть event-bus (видит nats:4222), env с кредами и CONSUMER/IN_FILTER/OUT_SUBJECT.

6. Проверь

Опубликуй входной факт (tutorial) → убедись, что участник его обработал и опубликовал результат. Проверь каталог и трейс.

Удаление (зеркально, раздел 9)

Вывести → явно удалить durable-консьюмер (иначе осиротевший pending) → отозвать креды → PR в контракты.