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

Pipeline обработки событий

Данный документ описывает конвейер (pipeline) обработки событий в BotFlux — путь, который проходит входящее сообщение от пользователя до формирования и отправки ответа платформе.

Документ предназначен для разработчиков, использующих BotFlux для построения ботов и диалоговых систем, и описывает архитектурные роли компонентов без привязки к конкретной платформе.


Назначение pipeline

Pipeline обработки событий решает следующие задачи:

  • изоляция бизнес‑логики от транспортного и платформенного слоёв
  • единый и расширяемый механизм обработки входящих событий
  • централизованная обработка ошибок и восстановление выполнения
  • возможность расширения без изменения существующих обработчиков

Pipeline является инфраструктурным механизмом и не содержит бизнес‑логики.


Общая схема

Обработка события проходит через следующие логические этапы:

  1. Получение сообщения транспортом
  2. Преобразование события шлюзом (Gateway)
  3. Оркестрация обработки диспетчером (Dispatcher)
  4. Формирование аргументов вызова обработчика
  5. Выполнение бизнес‑логики
  6. Преобразование результата в действие
  7. Отправка действия платформе
  8. Обработка ошибок и результатов выполнения

Полный цикл представлен на диаграмме последовательностей:

sequenceDiagram
    actor U as User

    box Infrastructure
    participant T as Transport
    participant G as Gateway
    end

    box Pipeline Dispatcher
    participant D as Dispatcher
    participant AR as Argument resolver
    participant AC as Action converter
    participant EH as Exception handler
    end

    participant H as Handler

    U-->>T: Message
    T->>G: Platform event
    G->>D: Gateway event
    D->>AR: Event context
    AR->>H: Invocation arguments
    H->>AC: Result
    AC->>D: Action
    D-->>EH: Recoverable error
    EH-->>D: Recovered action
    D->>G: BotFlux action
    G->>T: Platform request
    G->>D: Perform action result
    D-->>EH: Failure
    T-->>U: Message

Участники pipeline

Transport

Transport — внешний инфраструктурный компонент, отвечающий за взаимодействие с платформой доставки сообщений.

Основные обязанности:

  • приём входящих запросов (HTTP, WebSocket, Long Polling и др.)
  • отправка исходящих запросов платформе
  • отсутствие бизнес‑логики

Transport не участвует в обработке событий и не принимает решений.


Gateway

Gateway является адаптером между конкретной платформой и ядром BotFlux.

Основные обязанности:

  • преобразование platform‑specific событий в Gateway Event
  • преобразование BotFlux Action в запрос платформы
  • управление очередями и асинхронной доставкой

Gateway не содержит бизнес‑логики и не обрабатывает события напрямую.


Dispatcher

Dispatcher — центральный координатор pipeline обработки событий.

Основные обязанности:

  • управление порядком обработки события
  • вызов резолверов аргументов
  • вызов обработчиков (Handler)
  • передача результатов в конвертеры действий
  • делегирование обработки ошибок

Dispatcher не содержит бизнес‑логики и не интерпретирует результаты обработчиков.


Argument Resolver

Argument Resolver — инфраструктурный компонент, формирующий аргументы вызова обработчика.

Основные обязанности:

  • получение Event Context
  • извлечение данных из события
  • формирование параметров для вызова Handler

Argument Resolver’ы используются как расширяемая цепочка и не зависят от бизнес‑логики.


Handler

Handler содержит бизнес‑логику приложения.

Характеристики:

  • принимает подготовленные аргументы
  • не зависит от платформы и транспорта
  • возвращает результат выполнения
  • не выполняет отправку сообщений напрямую

Handler не управляет жизненным циклом и не обрабатывает ошибки доставки.


Action Converter

Action Converter преобразует результат работы обработчика в BotFlux Action.

Основные обязанности:

  • поддержка различных типов возвращаемых значений
  • изоляция бизнес‑логики от формата действий
  • расширяемость без изменения Dispatcher и Handler

Exception Handler

Exception Handler отвечает за обработку исключений, возникающих в процессе обработки события.

Возможности:

  • перехват исключений на любом этапе pipeline
  • восстановление выполнения
  • преобразование ошибки в действие
  • проброс исключения далее

Exception Handler’ы не влияют на бизнес‑логику обработчиков.


Поток обработки события

  1. Пользователь отправляет сообщение платформе
  2. Transport принимает сообщение и передаёт его в Gateway
  3. Gateway преобразует сообщение в Gateway Event
  4. Dispatcher инициирует обработку события
  5. Argument Resolver формирует аргументы вызова
  6. Handler выполняет бизнес‑логику
  7. Action Converter преобразует результат в BotFlux Action
  8. Dispatcher передаёт действие в Gateway
  9. Gateway отправляет запрос платформе через Transport
  10. Результаты и ошибки доставки обрабатываются Dispatcher и Exception Handler

Гарантии архитектуры

Pipeline обработки событий обеспечивает:

  • строгую изоляцию слоёв
  • расширяемость без нарушения контрактов
  • централизованную обработку ошибок
  • повторяемый и предсказуемый жизненный цикл обработки

Данный подход позволяет развивать систему без переписывания существующих обработчиков и платформенных адаптеров.