跳转到正文

独立使用

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(),它们依赖于 WordPress cron 过滤器和 do_action()
  • 实际的 wp queuety ... 命令注册路径,它依赖于 WP-CLI 加载 WordPress

这些部分是围绕核心运行时的适配器,而非运行时本身。

初始化

独立使用路径刻意设计得很精简。打开一个数据库支持的 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 专用事件和请求集成留在应有的位置。