본문으로 건너뛰기

Queuety

WordPress 워크플로 엔진.

터미널
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

최신 릴리스 v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

실제 사용

PHP에서 정의한 워크플로와 이를 실행하는 작업자 명령입니다.

승인 워크플로

워크플로는 단계를 실행하고 24시간 대기한 다음, 다른 프로세스가 approval 시그널을 보낼 때까지 wait_for_approval()에서 일시 중지됩니다.

지연 시간은 데이터베이스에 저장되므로 작업자를 재시작하거나 배포해도 유지됩니다. 대기 전에 보낸 시그널도 기록되며 워크플로가 대기 단계에 도달하면 처리됩니다. 실행을 취소하면 on_cancel() 핸들러가 호출됩니다.

PHP
$workflow_id = Queuety::workflow( 'approval_flow' )
    ->then( SubmitRequestHandler::class )
    ->delay( hours: 24 )
    ->wait_for_approval()
    ->then( ProcessApprovalHandler::class )
    ->on_cancel( CleanupHandler::class )
    ->dispatch( [ 'request_id' => 99 ] );

// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );

직접 MySQL 클레임

각 작업자는 오래 실행되는 WP-CLI 프로세스에서 실행되며, FOR UPDATE SKIP LOCKED를 사용해 MySQL에서 작업을 직접 가져옵니다.

지속성 있는 워크플로

상태가 저장되는 다단계 프로세스로, PHP 시간 초과, 충돌, 재시도에도 상태가 유지됩니다.

상태 머신

Queuety::machine()을 갖춘 장기 실행 이벤트 기반 상태: 상태와 전이를 정의하고, 이벤트를 보내고, 타임라인을 확인하세요.

시그널 및 승인

wait_for_signal(), wait_for_approval() 및 wait_for_input()은 외부 입력이 도착할 때까지 워크플로를 일시 중지합니다.

우선순위 단계

낮음부터 긴급까지 네 단계입니다. 대기열 내에서는 우선순위가 높은 작업을 먼저 가져옵니다.

속도 제한

슬라이딩 윈도우 기준 핸들러별 제한을 설정합니다. 속도 제한이 적용된 작업을 가져온 작업자는 해당 작업을 다시 대기열에 넣고 기다립니다.

반복 작업

간격 및 cron 기반 스케줄링을 지원합니다. 외부 의존성이 없는 내장 cron 파서를 제공합니다.

병렬 단계

워크플로 단계를 동시에 실행하고, 다음 단계로 넘어가기 전에 모두 완료될 때까지 기다립니다.

메트릭 및 로깅

핸들러별 처리량, 평균 및 p95 실행 시간, 오류율을 기록하는 영구 데이터베이스 로그입니다.

WP-Cron 대체 실행

셸에 접근할 수 없으면, 분당 한 번 실행되는 WordPress cron 이벤트가 기본 대기열의 작업을 한 번 실행하는 작업자를 시작합니다.

미들웨어

속도 제한, 예외 조절, 고유성, 시간 초과 및 중복 실행 방지를 위한 양파형 작업 미들웨어입니다.

PHP 8.2+

열거형, 읽기 전용 클래스, match 표현식, 생성자 프로모션 및 PHP 속성을 지원합니다.

Queuety를 사용하는 이유

상태는 MySQL에 저장됩니다

대기열 행, 워크플로 상태, 로그, 시그널 및 스트리밍 청크는 MySQL에 저장되므로 작업자를 재시작해도 오케스트레이션 상태가 손실되지 않습니다. 각 단계 경계에서는 상태 업데이트, 작업 완료 및 다음 작업의 대기열 등록을 하나의 트랜잭션으로 커밋합니다.

페이지 요청 처리와 분리

WP-Cron은 페이지 방문 시에만 실행되며, 60초가 걸리는 LLM 호출은 30초 PHP 시간 초과로 종료됩니다. Queuety 작업자는 장기 실행 WP-CLI 프로세스에서 실행되므로 트래픽을 기다리지 않고 작업을 처리합니다.

에이전트 실행을 위한 안전장치

쿼럼 모드, 승인 단계와 max_transitions() 및 max_state_bytes() 같은 제한을 갖춘 for_each()은 장기 실행 에이전트 작업이 정해진 범위 안에서 진행되도록 합니다.

WordPress 외부에서도 사용 가능

데이터베이스 기반 핵심 기능은 같은 데이터베이스를 열 수 있는 모든 PHP 프로세스에서 실행되므로 다른 앱에서도 작업을 등록하고, 시그널을 보내고, 워크플로 상태를 확인할 수 있습니다. 작업 트리거, WP-Cron 브리지 및 WP-CLI 명령에는 여전히 WordPress이 필요합니다.

비교 대상

Queuety과 개발자에게 익숙한 스케줄러 및 워크플로 엔진 WordPress의 관계를 살펴봅니다.

Queuety와 다른 도구 비교
WP-Cron 잘하는 점WordPress에 내장되어 있어 공유 호스팅에서 시스템 스케줄러에 접근할 필요가 없습니다. 실행 시각을 놓친 작업은 누락되는 대신 다음 페이지 로드 시 실행됩니다. Queuety와의 차이점Queuety 작업자는 사이트 트래픽과 별도로 실행되며, 장기 실행 wp queuety work 프로세스가 필요합니다. WP-Cron 브리지는 반복 이벤트를 스케줄로 변환하지만 아직 해당 훅 콜백을 실행하지 않으므로, 이 작업은 계속 WP-Cron이 담당합니다.
Action Scheduler 잘하는 점서버 접근 없이 플러그인과 테마에 배포할 수 있도록 만들어졌습니다. 매달 Subscriptions 결제 수백만 건과 WooCommerce 웹훅을 처리하며, 모든 작업을 관리자 인터페이스에 기록합니다. Queuety와의 차이점Action Scheduler는 지연된 do_action()처럼 나중에 훅을 실행합니다. Queuety은 단계 사이에 상태가 유지되는 다단계 워크플로, 시그널 및 승인 대기, 상태 머신을 추가합니다. wp queuety workflow timeline 같은 WP-CLI 명령으로 워크플로를 살펴볼 수 있습니다.
Temporal 잘하는 점지속성 있는 실행 플랫폼입니다. 이벤트 기록이 워크플로의 각 단계를 저장하므로, 충돌이나 중단 후에도 마지막으로 기록된 이벤트부터 실행을 재개할 수 있습니다. 서비스를 직접 호스팅하는 대신 Temporal Cloud를 사용할 수도 있습니다. Queuety와의 차이점Temporal Service는 애플리케이션과 함께 실행되는 Go 서버와 데이터베이스로 구성됩니다. Queuety은 WordPress 데이터베이스 연결의 MySQL 테이블에 상태를 저장하고 WP-CLI을 통해 작업자를 실행합니다.

질문과 답변

Queuety 문서의 간단한 답변.

플러그인을 설치하고 작업자를 시작한 다음, 첫 작업부터 승인 워크플로와 상태 머신까지 안내서를 따라가세요.