Pipeline обработки событий
Данный документ описывает конвейер (pipeline) обработки событий в BotFlux — путь, который проходит входящее сообщение от пользователя до формирования и отправки ответа платформе.
Документ предназначен для разработчиков, использующих BotFlux для построения ботов и диалоговых систем, и описывает архитектурные роли компонентов без привязки к конкретной платформе.
Назначение pipeline
Pipeline обработки событий решает следующие задачи:
- изоляция бизнес‑логики от транспортного и платформенного слоёв
- единый и расширяемый механизм обработки входящих событий
- централизованная обработка ошибок и восстановление выполнения
- возможность расширения без изменения существующих обработчиков
Pipeline является инфраструктурным механизмом и не содержит бизнес‑логики.
Общая схема
Обработка события проходит через следующие логические этапы:
- Получение сообщения транспортом
- Преобразование события шлюзом (Gateway)
- Оркестрация обработки диспетчером (Dispatcher)
- Формирование аргументов вызова обработчика
- Выполнение бизнес‑логики
- Преобразование результата в действие
- Отправка действия платформе
- Обработка ошибок и результатов выполнения
Полный цикл представлен на диаграмме последовательностей:
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’ы не влияют на бизнес‑логику обработчиков.
Поток обработки события
- Пользователь отправляет сообщение платформе
- Transport принимает сообщение и передаёт его в Gateway
- Gateway преобразует сообщение в Gateway Event
- Dispatcher инициирует обработку события
- Argument Resolver формирует аргументы вызова
- Handler выполняет бизнес‑логику
- Action Converter преобразует результат в BotFlux Action
- Dispatcher передаёт действие в Gateway
- Gateway отправляет запрос платформе через Transport
- Результаты и ошибки доставки обрабатываются Dispatcher и Exception Handler
Гарантии архитектуры
Pipeline обработки событий обеспечивает:
- строгую изоляцию слоёв
- расширяемость без нарушения контрактов
- централизованную обработку ошибок
- повторяемый и предсказуемый жизненный цикл обработки
Данный подход позволяет развивать систему без переписывания существующих обработчиков и платформенных адаптеров.