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 в контракты.