Modèles de workflow
Les modèles de workflow permettent de définir une seule fois la structure des étapes d’un workflow, puis de le lancer plusieurs fois par son nom. C’est utile lorsqu’un même processus en plusieurs étapes doit s’exécuter avec différentes charges utiles.
Définir un modèle
Utilisez Queuety::define_workflow() pour créer le modèle, puis enregistrez-le :
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 );
Enregistrez les modèles tôt, par exemple dans le hook d’initialisation d’une extension :
add_action( 'init', function () {
$builder = Queuety::define_workflow( 'onboarding' )
->then( CreateAccountHandler::class )
->then( SendWelcomeEmailHandler::class )
->then( NotifyAdminHandler::class );
Queuety::register_workflow_template( $builder );
} );
Exécuter un modèle
Lancez un modèle enregistré par son nom avec Queuety::run_workflow() :
$workflow_id = Queuety::run_workflow( 'onboarding', [ 'email' => 'user@example.com' ] );
Le deuxième argument est la charge utile ou l’état initial, comme pour ->dispatch() sur un générateur. L’entier renvoyé correspond à l’identifiant du workflow.
Si le modèle n’est pas enregistré, une exception RuntimeException est levée.
Lister les modèles enregistrés
Accédez au registre des modèles :
$registry = Queuety::workflow_templates();
$template = $registry->get( 'onboarding' ); // WorkflowTemplate or null
Exemple complet
// 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' ] );
Modèles et workflows intégrés
| Workflow intégré | Modèle | |
|---|---|---|
| Définition | Au moment du lancement | Une fois, au moment de l’enregistrement |
| Lancement | Queuety::workflow('name')->then(...)->dispatch() |
Queuety::run_workflow('name', $payload) |
| Réutilisation | Construire la chaîne à chaque fois | Enregistrer une fois et lancer plusieurs fois |
| Idéal pour | Workflows ponctuels ou composés dynamiquement | Processus standard et répétables |