Pāriet uz saturu

Viena faila darbplūsmas

Darbplūsma var būt pilnībā ietverta vienā PHP failā. Definējiet soļu klases un veidotāju kopā, ievietojiet failu direktorijā un ielādējiet šo direktoriju, izmantojot Queuety::load_workflows() (parādīts tālāk). Queuety pats par sevi nevienu direktoriju nepārmeklē.

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

Fails atgriež WorkflowBuilder. Katra soļa klase ir definēta tieši failā. Kad fails tiek ielādēts, klases kļūst pieejamas un darbplūsma tiek reģistrēta kā veidne.

Darbplūsmu ielāde

Ielādējiet visus darbplūsmu failus no direktorijas:

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

Vai ielādējiet vienu failu:

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

Pēc tam nosūtiet izpildei pēc nosaukuma:

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

Rekursīva ielāde

Nododiet true kā otro argumentu, lai pārmeklētu apakšdirektorijas:

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

Tas ļauj kārtot darbplūsmas mapēs:

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

Visu darbplūsmas funkciju izmantošana

Failos definētas darbplūsmas atbalsta visas veidotāja funkcijas, izņemot idempotency_key(), kas veidnē netiek saglabāts; tā vietā nododiet to katrā nosūtīšanas reizē, izmantojot Queuety::run_workflow( $name, $payload, [ 'idempotency_key' => '...' ] ). Aizkaves, signāli, paralēlie soļi, nosacījumu atzarošana, darbplūsmu palaišana, atcelšanas apstrādātāji un stāvokļa apgriešana darbojas:

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

Kad izmantot failos definētas darbplūsmas

Failos definētas darbplūsmas ir ideāli piemērotas, ja:

  • LLM vai koda ģenerators programmatiski veido darbplūsmas
  • Darbplūsma ir pietiekami vienkārša, lai ietilptu vienā failā
  • Vēlaties soļu loģiku turēt tuvu darbplūsmas definīcijai
  • Veidojat prototipu un vēlaties ātri veikt atkārtojumus

Lielākām darbplūsmām ar koplietotām soļu klasēm, sarežģītu starpprogrammatūru vai soļiem, ko izmanto vairākās darbplūsmās, uzturamāka ir standarta pieeja ar atsevišķiem klašu failiem un PSR-4 automātisko ielādi.

Kā tas darbojas

Zem pārsega failos definētās darbplūsmas izmanto to pašu dzinēju, ko veidotājs API. Katrs solis ir atsevišķs uzdevums datubāzē. Stāvoklis tiek nodots caur tabulu queuety_workflows. Atkārtota izpilde nav pieejama, nav nepieciešama deterministiska izpilde un veiktspēja neatšķiras.

Katrs ielādes izsaukums izpilda failu ar require (nevis require_once), tāpēc katru failu ielādējiet vienreiz pieprasījuma laikā; ielādējot to divreiz, klases tiek deklarētas atkārtoti un rodas kļūda. Atgrieztais WorkflowBuilder tiek pārveidots par WorkflowTemplate un saglabāts WorkflowRegistry. Nosūtīšana un izpilde neatšķiras no citām darbplūsmām.