본문으로 건너뛰기

독립 실행

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 전용 이벤트 및 요청 통합은 필요한 위치에 둘 수 있습니다.