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

Автономное использование

Queuety распространяется как плагин WordPress, но для большей части среды выполнения не нужен активный запрос WordPress.

Очередь, механизм рабочих процессов, конечные автоматы, сигналы, артефакты, пакетная обработка, планирование, ведение журналов, метрики и управление ресурсами работают с одними и теми же таблицами MySQL. Если другой процесс PHP может открыть ту же базу данных, он может напрямую использовать это ядро.

В Queuety эта граница автономного использования означает, что механизм оркестрации на основе базы данных работает вне WordPress. Адаптеры WordPress по-прежнему относятся к WordPress.

Что работает вне WordPress

При прямом подключении к Connection автономный процесс может инициализировать Queuety и использовать те же методы фасада, что и плагин для базовой среды выполнения:

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

Это означает, что внешний продукт может обращаться к тому же состоянию оркестрации без предварительной загрузки WordPress, если он использует ту же базу данных и те же имена таблиц.

Сейчас исключение составляют пулы обработчиков: Queuety::run_worker_pool() и Queuety::run_auto_scaling_worker_pool() считывают константы WordPress DB_HOST, DB_NAME, DB_USER и DB_PASSWORD вместо инициализированного подключения, поэтому автономный процесс должен определить эти константы до запуска пула (#5).

Что остается внутри WordPress

Уровень адаптеров, специфичных для WordPress, по-прежнему зависит от загрузки WordPress.

К нему относятся:

  • загрузка плагинов и поведение при активации в queuety.php
  • Queuety::on_action(), для которого требуется add_action()
  • Queuety::replace_wp_cron() и Queuety::restore_wp_cron(), зависящие от фильтров и do_action() WordPress cron
  • регистрация настоящей команды wp queuety ..., зависящая от загрузки WordPress через WP-CLI

Эти компоненты служат адаптерами для базовой среды выполнения. Они сами по себе не являются средой выполнения.

Инициализация

Автономный путь намеренно сделан компактным. Откройте Connection с подключением к БД, инициализируйте фасад и убедитесь, что схема существует.

PHP
use Queuety\Connection;
use Queuety\Queuety;

$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
);

Queuety::init( $conn );
Queuety::ensure_schema();

После этого становится доступен обычный API среды выполнения:

PHP
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );

$workflow_id = Queuety::workflow( 'report' )
    ->then( FetchReportData::class )
    ->then( RenderReport::class )
    ->dispatch( [ 'report_id' => 42 ] );

$machine_id = Queuety::machine( 'agent_session' )
    ->state( 'awaiting_input' )
    ->on( 'message', 'planning' )
    ->state( 'planning' )
    ->action( PlanSessionAction::class )
    ->dispatch();

Именование таблиц

Для автономного использования не требуются именно имена таблиц WordPress. Нужна лишь стабильная стратегия задания префиксов.

Если подключаете Queuety к базе данных WordPress, используйте тот же префикс, что и в плагине. Если используете Queuety в отдельной базе данных, префикс подключения может быть любым, который ожидает ваше хост-приложение. Часть имени таблицы, относящаяся к Queuety, по-прежнему задается через QUEUETY_TABLE_PREFIX и переопределения для отдельных таблиц.

Встроенные среды выполнения, использующие одну базу данных, могут задавать эту часть, связанную с Queuety, для каждого подключения:

PHP
$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
    table_prefix: 'themequeue_',
);

При этом префикс базы данных WordPress остается без изменений, а таблицы, например queuety_jobs, преобразуются в wp_themequeue_jobs.

Концептуальная модель

Удобнее всего представить это разделение так:

  • Ядро Queuety: очередь, рабочие процессы, рабочие последовательности, конечные автоматы, сигналы, артефакты и метаданные среды выполнения
  • Адаптер WordPress: инициализация плагина, мосты хуков, замена WP-Cron и регистрация WP-CLI

Так сохраняется единый движок оркестрации, а интеграция событий и запросов, специфичная для WordPress, остается там, где ей и место.