Vai al contenuto

Modelli di flusso di lavoro

I modelli di flusso di lavoro consentono di definire una volta la struttura dei passaggi e di avviarla più volte in base al nome. Sono utili quando lo stesso processo articolato in più passaggi deve essere eseguito con payload diversi.

Definire un modello

Usate Queuety::define_workflow() per creare il modello, quindi registratelo:

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 );

Registrate i modelli in anticipo, ad esempio nell'hook di inizializzazione di un plugin:

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

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

Eseguire un modello

Avviate un modello registrato in base al nome con Queuety::run_workflow():

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

Il secondo argomento è il payload o stato iniziale, come ->dispatch() su un builder. L'intero restituito è l'ID del flusso di lavoro.

Se il modello non è registrato, viene generata un'eccezione RuntimeException.

Elencare i modelli registrati

Accedete al registro dei modelli:

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

Esempio completo

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' ] );

Modelli e flussi di lavoro inline a confronto

Flusso di lavoro inline Modello
Definizione Al momento dell'avvio Una volta, al momento della registrazione
Avvio Queuety::workflow('name')->then(...)->dispatch() Queuety::run_workflow('name', $payload)
Riutilizzo Creare ogni volta la sequenza Registrare una volta e avviare più volte
Ideale per Flussi di lavoro occasionali o composti dinamicamente Processi standard e ripetibili