Перейти к содержимому

Архитектура модульной платформы

Слои

СлойПутьРоль
Ядроapp/Integrations/Шина хуков, snapshot, outbound, REST, лицензии, Filament‑реестр
Пакетыmodules/Integrations/{Code}/manifest, hooks.php, handlers, instance_form
АдминкаМодули интеграцийКаталог, подключения, мониторинг
ОчередиLaravel Queueintegrations.*, при необходимости default

Operational

Модуль operational, если:

  1. Есть в БД (Синхронизировать в каталоге);
  2. Включён;
  3. Лицензия valid (или license.required: false);
  4. Legacy: дополнительно IntegrationModuleInterface::enabled().
bash
php artisan integrations:package:inspect MyModule

Подключения и точки

Snapshot содержит pickup_point_id.

ИнстансСобытия
На конкретную точкуТолько эта точка
Все точки (bulk)Отдельный инстанс на каждую активную точку с теми же настройками
Нет подключенийHandler из hooks.php может работать без привязки; outbound — нет

Outbound привязан к активному инстансу.

Два канала исходящих событий

PlatformHookBus на каждый хук:

  1. Jobs outbound для endpoint инстанса;
  2. Jobs handler для пакетов из hooks.php.

Каналы независимы.

Snapshot

Массив JSON, не Eloquent. Для статусов: status_code, status_semantic, previous_*.

Идемпотентность

integration_hook_deliveries: (package, hook, idempotency_key). Повтор completed не вызывает handler.

Backpressure

МеханизмEnv
max pendingINTEGRATION_HOOK_MAX_PENDING (500)
rate limitINTEGRATION_HOOK_RATE_LIMIT (120/мин)
circuit breakerINTEGRATION_CB_*

Legacy

МойСклад и др. без manifest — is_legacy, старый sync, форма Интеграции. Новые модули — manifest + Подключения.

Очереди

INTEGRATION_DEDICATED_QUEUES (config по умолчанию true):

ОчередьСодержимое
integrations.{Code}Handlers платформы, inbound job
integrations.outboundPOST наружу

Jobs внутри модуля могут использовать свою логику очереди. То есть сам пакет при необходимости может отправлять тяжёлые внутренние задачи либо в default, либо в свою отдельную очередь.

Не смешивайте тяжёлый синк каталога с integrations без необходимости.

После commit

Статусы, оплаты — только DB::afterCommit.

Связанные разделы

База знаний для EMS-платформы PlatParts.