Yhden tiedoston työnkulut
Työnkulku voi olla täysin itsenäinen yhdessä PHP-tiedostossa. Määritä vaiheluokat ja rakentaja samassa tiedostossa, sijoita tiedosto hakemistoon ja lataa hakemisto komennolla Queuety::load_workflows() (alla). Queuety ei etsi tiedostoja mistään hakemistosta itsenäisesti.
// 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');
Tiedosto palauttaa arvon WorkflowBuilder. Kukin vaihe luokitellaan tiedoston sisällä. Kun tiedosto ladataan, luokat tulevat käyttöön ja työnkulku rekisteröidään malliksi.
Työnkulkujen lataaminen
Lataa kaikki työnkulkutiedostot hakemistosta:
// Load all .php files from the workflows directory
$count = Queuety::load_workflows(__DIR__ . '/workflows/');
Tai lataa yksittäinen tiedosto:
$template = Queuety::load_workflow_file(__DIR__ . '/workflows/onboard-user.php');
Lähetä sitten suoritettavaksi nimen perusteella:
$workflow_id = Queuety::run_workflow('onboard_user', ['email' => 'user@example.com']);
Rekursiivinen lataus
Anna true toisena argumenttina alihakemistojen skannausta varten:
Queuety::load_workflows(__DIR__ . '/workflows/', recursive: true);
Näin työnkulut voidaan järjestää kansioihin:
workflows/
├── onboarding/
│ ├── new-user.php
│ └── trial-upgrade.php
├── reports/
│ ├── daily-summary.php
│ └── weekly-digest.php
└── notifications/
└── digest-email.php
Kaikkien työnkulkuominaisuuksien käyttö
Tiedostotyönkulut tukevat kaikkea, mitä rakentajakin, paitsi idempotency_key()-toimintoa, jota ei tallenneta malliin; anna se suorituskutsussa käyttämällä toimintoa Queuety::run_workflow( $name, $payload, [ 'idempotency_key' => '...' ] ). Viiveet, signaalit, rinnakkaiset vaiheet, ehdollinen haarautuminen, työnkulkujen suorittaminen, peruutuskäsittelijät ja tilan karsiminen toimivat kaikki:
// 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);
Milloin tiedostotyönkulkuja kannattaa käyttää
Tiedostotyönkulut sopivat hyvin, kun:
- LLM tai koodigeneraattori luo työnkulkuja ohjelmallisesti
- Työnkulku on niin yksinkertainen, että se mahtuu yhteen tiedostoon
- Haluat pitää vaihelogiikan lähellä työnkulun määritelmää
- Luot prototyyppiä ja haluat iteroida nopeasti
Suuremmissa työnkuluissa, joissa on jaettuja vaiheluokkia, monimutkaisia väliohjelmistoja tai useissa työnkuluissa uudelleenkäytettäviä vaiheita, erilliset luokkatiedostot ja PSR-4-automaattinen lataus ovat ylläpidettävämpi ratkaisu.
Näin se toimii
Konepellin alla tiedostotyönkuluissa käytetään täsmälleen samaa moottoria kuin rakentajassa API. Kukin vaihe on erillinen työ tietokannassa. Tila kulkee queuety_workflows-taulukon kautta. Toistoa tai deterministisyysvaatimusta ei ole, eikä suorituskyvyssä ole eroa.
Jokainen latauskutsu require lukee tiedoston (ei require_once), joten lataa kukin tiedosto vain kerran pyyntöä kohden; sen lataaminen kahdesti määrittelisi luokat uudelleen ja aiheuttaisi virheen. Palautettu WorkflowBuilder muunnetaan muotoon WorkflowTemplate ja tallennetaan kohteeseen WorkflowRegistry. Lähettäminen suoritettavaksi ja suoritus toimivat samoin kuin missä tahansa muussa työnkulussa.