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ē.
// 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:
// Load all .php files from the workflows directory
$count = Queuety::load_workflows(__DIR__ . '/workflows/');
Vai ielādējiet vienu failu:
$template = Queuety::load_workflow_file(__DIR__ . '/workflows/onboard-user.php');
Pēc tam nosūtiet izpildei pēc nosaukuma:
$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:
Queuety::load_workflows(__DIR__ . '/workflows/', recursive: true);
Tas ļauj kārtot darbplūsmas mapēs:
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:
// 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.