
# 独立使用

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](https://github.com/inline0/queuety/issues/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 专用事件和请求集成留在应有的位置。
