Ugrás a tartalomhoz

Egyfájlos munkafolyamatok

Egy munkafolyamat teljes egészében elfér egyetlen PHP fájlban. Határozza meg együtt a lépésosztályokat és a builderelemeket, helyezze a fájlt egy könyvtárba, majd töltse be a könyvtárat a Queuety::load_workflows() segítségével (lásd alább). A Queuety önmagában nem vizsgál át egyetlen könyvtárat sem.

PHP
// workflows/onboard-user.php
use Queuety\Queuety;

class CreateAccount implements \Queuety\Step {
    public function handle(array $state): array {
        $user = create_user($state['email']);
        return ['user_id' => $user->id, 'user_name' => $user->name];
    }
    public function config(): array {
        return ['max_attempts' => 3];
    }
}

class SendWelcome implements \Queuety\Step {
    public function handle(array $state): array {
        wp_mail($state['email'], 'Welcome ' . $state['user_name'], '...');
        return ['welcomed' => true];
    }
    public function config(): array {
        return [];
    }
}

return Queuety::define_workflow('onboard_user')
    ->then(CreateAccount::class, 'create_account')
    ->then(SendWelcome::class, 'send_welcome');

A fájl egy WorkflowBuilder értéket ad vissza. Minden lépésosztály beágyazva van definiálva. A fájl betöltésekor az osztályok elérhetővé válnak, a munkafolyamat pedig sablonként lesz regisztrálva.

Munkafolyamatok betöltése

Az összes munkafolyamat-fájl betöltése egy könyvtárból:

PHP
// Load all .php files from the workflows directory
$count = Queuety::load_workflows(__DIR__ . '/workflows/');

Vagy egyetlen fájl betöltése:

PHP
$template = Queuety::load_workflow_file(__DIR__ . '/workflows/onboard-user.php');

Ezután indítsa el név alapján:

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

Rekurzív betöltés

Adja át a true értéket második argumentumként az alkönyvtárak vizsgálatához:

PHP
Queuety::load_workflows(__DIR__ . '/workflows/', recursive: true);

Így a munkafolyamatok mappákba rendezhetők:

Kód
workflows/
├── onboarding/
│   ├── new-user.php
│   └── trial-upgrade.php
├── reports/
│   ├── daily-summary.php
│   └── weekly-digest.php
└── notifications/
    └── digest-email.php

Az összes munkafolyamat-funkció használata

A fájlalapú munkafolyamatok a builder minden funkcióját támogatják, kivéve a idempotency_key() elemet, amely nem tárolódik a sablonban; helyette átadáskor adja meg a Queuety::run_workflow( $name, $payload, [ 'idempotency_key' => '...' ] ) segítségével. A késleltetések, jelzések, párhuzamos lépések, feltételes elágazások, munkafolyamatok indítása, megszakításkezelők és állapotritkítás mind működnek:

PHP
// workflows/approval-flow.php
use Queuety\Queuety;

class SubmitRequest implements \Queuety\Step {
    public function handle(array $state): array {
        return ['submitted_at' => date('Y-m-d H:i:s')];
    }
    public function config(): array { return []; }
}

class ProcessApproval implements \Queuety\Step {
    public function handle(array $state): array {
        return [
            'approved_by' => $state['approved_by'],
            'processed' => true,
        ];
    }
    public function config(): array { return []; }
}

class CleanupRequest implements \Queuety\Handler {
    public function handle(array $payload): void {
        delete_pending_request($payload['request_id']);
    }
    public function config(): array { return []; }
}

return Queuety::define_workflow('approval_flow')
    ->then(SubmitRequest::class)
    ->delay(hours: 24)
    ->wait_for_signal('approved')
    ->then(ProcessApproval::class)
    ->on_cancel(CleanupRequest::class)
    ->prune_state_after(2);

Mikor érdemes fájlalapú munkafolyamatot használni

Fájlalapú munkafolyamat akkor ideális, ha:

  • Egy LLM vagy kódgenerátor programozottan hoz létre munkafolyamatokat
  • A munkafolyamat elég egyszerű ahhoz, hogy egy fájlban elférjen
  • A lépéslogikát közel szeretné tartani a munkafolyamat definíciójához
  • Prototípust készít, és gyors iterációra van szüksége

Nagyobb, megosztott lépésosztályokat, összetett köztesréteget vagy több munkafolyamatban újrahasznált lépéseket tartalmazó munkafolyamatoknál karbantarthatóbb a külön osztályfájlok és a PSR-4 automatikus betöltés szokásos megközelítése.

Működés

A motorháztető alatt a fájlalapú munkafolyamatok pontosan ugyanazt a motort használják, mint a API builder. Minden lépés külön feladat az adatbázisban. Az állapot a queuety_workflows táblán keresztül áramlik. Nincs visszajátszás, nincs determinisztikussági követelmény, és nincs teljesítménykülönbség.

Minden betöltési hívás require-ezi a fájlt (nem require_once-ezi), ezért kérésenként minden fájlt csak egyszer töltsön be; a kétszeri betöltés újra deklarálja az osztályait, és hibát okoz. A visszaadott WorkflowBuilder WorkflowTemplate-vé alakul, majd a WorkflowRegistry tárolódik. Az indítás és a végrehajtás ugyanúgy működik, mint bármely más munkafolyamatnál.