Μετάβαση στο περιεχόμενο

Ροές εργασίας σε ένα αρχείο

Μια ροή εργασίας μπορεί να είναι πλήρως αυτοτελής σε ένα αρχείο PHP. Ορίστε μαζί τις κλάσεις βημάτων και το πρόγραμμα δημιουργίας, τοποθετήστε το αρχείο σε έναν κατάλογο και φορτώστε αυτόν τον κατάλογο με το Queuety::load_workflows() (όπως φαίνεται παρακάτω). Το Queuety δεν σαρώνει από μόνο του κανέναν κατάλογο.

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

Το αρχείο επιστρέφει ένα WorkflowBuilder. Κάθε κλάση βήματος ορίζεται ενσωματωμένα. Όταν φορτωθεί το αρχείο, οι κλάσεις γίνονται διαθέσιμες και η ροή εργασίας καταχωρίζεται ως πρότυπο.

Φόρτωση ροών εργασίας

Φορτώστε όλα τα αρχεία ροών εργασίας από έναν κατάλογο:

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

Ή φορτώστε ένα μεμονωμένο αρχείο:

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

Έπειτα αποστείλετε με βάση το όνομα:

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

Αναδρομική φόρτωση

Περάστε το true ως δεύτερο όρισμα για να σαρώσετε υποκαταλόγους:

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

Έτσι μπορείτε να οργανώσετε τις ροές εργασίας σε φακέλους:

Κώδικας
workflows/
├── onboarding/
│   ├── new-user.php
│   └── trial-upgrade.php
├── reports/
│   ├── daily-summary.php
│   └── weekly-digest.php
└── notifications/
    └── digest-email.php

Χρήση όλων των δυνατοτήτων ροής εργασίας

Οι ροές εργασίας σε αρχεία υποστηρίζουν όλες τις δυνατότητες του προγράμματος δημιουργίας, εκτός από το idempotency_key(), το οποίο δεν αποθηκεύεται στο πρότυπο· περάστε το ανά αποστολή με το Queuety::run_workflow( $name, $payload, [ 'idempotency_key' => '...' ] ). Οι καθυστερήσεις, τα σήματα, τα παράλληλα βήματα, η υπό όρους διακλάδωση, οι εκτελέσεις ροών εργασίας, οι χειριστές ακύρωσης και η περικοπή κατάστασης λειτουργούν κανονικά:

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

Πότε να χρησιμοποιείτε ροές εργασίας σε αρχεία

Οι ροές εργασίας σε αρχεία είναι ιδανικές όταν:

  • Ένα LLM ή μια γεννήτρια κώδικα δημιουργεί ροές εργασίας μέσω προγραμματισμού
  • Μια ροή εργασίας είναι αρκετά απλή ώστε να χωρά σε ένα αρχείο
  • Θέλετε η λογική των βημάτων να βρίσκεται κοντά στον ορισμό της ροής εργασίας
  • Κατασκευάζετε ένα πρωτότυπο και θέλετε γρήγορες επαναλήψεις

Για μεγαλύτερες ροές εργασίας με κοινόχρηστες κλάσεις βημάτων, σύνθετο ενδιάμεσο λογισμικό ή βήματα που επαναχρησιμοποιούνται σε πολλές ροές, η συνήθης προσέγγιση με ξεχωριστά αρχεία κλάσεων και αυτόματη φόρτωση PSR-4 είναι πιο εύκολη στη συντήρηση.

Πώς λειτουργεί

Στο παρασκήνιο, οι ροές εργασίας αρχείων χρησιμοποιούν ακριβώς την ίδια μηχανή με το εργαλείο δημιουργίας API. Κάθε βήμα είναι ξεχωριστή εργασία στη βάση δεδομένων. Η κατάσταση μεταφέρεται μέσω του πίνακα queuety_workflows. Δεν υπάρχει επανάληψη, απαίτηση ντετερμινισμού ή διαφορά στην απόδοση.

Κάθε κλήση load requireει το αρχείο (όχι require_once), επομένως φορτώστε κάθε αρχείο μία φορά ανά αίτημα· αν το φορτώσετε δύο φορές, οι κλάσεις του δηλώνονται ξανά και προκύπτει σφάλμα. Το επιστρεφόμενο WorkflowBuilder μετατρέπεται σε WorkflowTemplate και αποθηκεύεται στο WorkflowRegistry. Η αποστολή και η εκτέλεση είναι ίδιες με οποιαδήποτε άλλη ροή εργασίας.