Gå til indhold

Workflow-skabeloner

Workflow-skabeloner lader dig definere et workflows trinstruktur én gang og starte det flere gange efter navn. Det er nyttigt, når den samme proces med flere trin skal køre med forskellige nyttelaster.

Definition af en skabelon

Brug Queuety::define_workflow() til at opbygge skabelonen, og registrer den derefter:

PHP
use Queuety\Queuety;
use Queuety\Enums\Priority;

$builder = Queuety::define_workflow( 'onboarding' )
    ->on_queue( 'pipelines' )
    ->with_priority( Priority::Normal )
    ->max_attempts( 5 )
    ->then( CreateAccountHandler::class )
    ->then( SendWelcomeEmailHandler::class )
    ->then( NotifyAdminHandler::class );

Queuety::register_workflow_template( $builder );

Registrer skabeloner tidligt, for eksempel i et plugins initialiseringshook:

PHP
add_action( 'init', function () {
    $builder = Queuety::define_workflow( 'onboarding' )
        ->then( CreateAccountHandler::class )
        ->then( SendWelcomeEmailHandler::class )
        ->then( NotifyAdminHandler::class );

    Queuety::register_workflow_template( $builder );
} );

Kørsel af en skabelon

Start en registreret skabelon efter navn med Queuety::run_workflow():

PHP
$workflow_id = Queuety::run_workflow( 'onboarding', [ 'email' => 'user@example.com' ] );

Det andet argument er den indledende nyttelast/tilstand, ligesom ->dispatch() på en builder. Det returnerede heltal er workflow-id'et.

Hvis skabelonen ikke er registreret, udløses en RuntimeException.

Visning af registrerede skabeloner

Få adgang til skabelonregistret:

PHP
$registry = Queuety::workflow_templates();
$template = $registry->get( 'onboarding' ); // WorkflowTemplate or null

Fuldt eksempel

PHP
// Register templates on init.
add_action( 'init', function () {
    // User onboarding pipeline
    $onboarding = Queuety::define_workflow( 'onboarding' )
        ->on_queue( 'users' )
        ->then( CreateAccountHandler::class )
        ->then( SetupDefaultsHandler::class )
        ->then( SendWelcomeEmailHandler::class );
    Queuety::register_workflow_template( $onboarding );

    // Content generation pipeline
    $content = Queuety::define_workflow( 'generate_content' )
        ->on_queue( 'llm' )
        ->max_attempts( 5 )
        ->then( BuildPromptHandler::class )
        ->then( CallLLMHandler::class )
        ->then( ReviewOutputHandler::class )
        ->then( PublishHandler::class );
    Queuety::register_workflow_template( $content );
} );

// Dispatch them anywhere in your application.
$wf1 = Queuety::run_workflow( 'onboarding', [ 'email' => 'alice@example.com' ] );
$wf2 = Queuety::run_workflow( 'generate_content', [ 'topic' => 'WordPress performance' ] );

Skabeloner sammenlignet med inline-workflows

Inline-workflow Skabelon
Definition Ved start Én gang ved registrering
Start Queuety::workflow('name')->then(...)->dispatch() Queuety::run_workflow('name', $payload)
Genbrug Opbyg kæden hver gang Registrer én gang, start mange gange
Bedst til Engangsworkflows eller workflows sammensat dynamisk Standardiserede, gentagelige processer