Ομαδοποίηση
Οι ομάδες σάς επιτρέπουν να αποστέλλετε ένα σύνολο εργασιών και να τις παρακολουθείτε ως ενιαία μονάδα. Μπορείτε να καταχωρίσετε επανακλήσεις που ενεργοποιούνται όταν ολοκληρωθεί η ομάδα, όταν αποτύχει οποιαδήποτε εργασία ή όταν ολοκληρωθεί η ομάδα ανεξάρτητα από το αποτέλεσμα. Το Queuety παρακολουθεί αυτόματα την πρόοδο, τις αποτυχίες και την κατάσταση ακύρωσης.
Δημιουργία ομάδας
Χρησιμοποιήστε το Queuety::create_batch() για να ξεκινήσετε μια BatchBuilder. Περάστε έναν πίνακα από στιγμιότυπα Contracts\Job και καλέστε το dispatch() για να δημιουργήσετε την εγγραφή της ομάδας και όλες τις εργασίες.
use Queuety\Queuety;
$batch = Queuety::create_batch( [
new ImportUsersJob( $csv_chunk_1 ),
new ImportUsersJob( $csv_chunk_2 ),
new ImportUsersJob( $csv_chunk_3 ),
] )
->name( 'Import users' )
->on_queue( 'imports' )
->dispatch();
echo $batch->id; // The batch ID
Το dispatch() επιστρέφει ένα αντικείμενο τιμής Batch με την κατάσταση της ομάδας.
Μπορείτε επίσης να περάσετε πίνακες handler+payload αντί για στιγμιότυπα εργασιών:
$batch = Queuety::create_batch( [
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();
Επανακλήσεις
Καταχωρίστε κλάσεις διαχειριστών που θα καλούνται σε διαφορετικά σημεία του κύκλου ζωής της ομάδας. Κάθε κλάση διαχειριστή πρέπει να διαθέτει μέθοδο handle( Batch $batch ).
$batch = Queuety::create_batch( $jobs )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->dispatch();
| Μέθοδος | Πότε ενεργοποιείται |
|---|---|
then( $handler_class ) |
Όλες οι εργασίες ολοκληρώθηκαν επιτυχώς (ή έχει οριστεί το allow_failures()) |
catch( $handler_class ) |
Αποτυγχάνει η πρώτη εργασία της ομάδας |
finally( $handler_class ) |
Η ομάδα ολοκληρώνεται, είτε επιτύχει είτε αποτύχει |
Σύνταξη χειριστή επανάκλησης
use Queuety\Batch;
class ImportCompleteHandler {
public function handle( Batch $batch ): void {
// All users imported. Send a notification.
error_log( "Batch {$batch->id} completed: {$batch->total_jobs} jobs processed." );
}
}
class ImportFailedHandler {
public function handle( Batch $batch ): void {
error_log( "Batch {$batch->id} had a failure. Failed jobs: {$batch->failed_jobs}" );
}
}
class ImportCleanupHandler {
public function handle( Batch $batch ): void {
// Runs regardless of outcome. Clean up temp files, etc.
}
}
Επιτρέπονται αποτυχίες
Από προεπιλογή, η επανάκληση then ενεργοποιείται μόνο αν επιτύχουν όλες οι εργασίες της ομάδας. Καλέστε το allow_failures() για να επιτρέψετε στην επανάκληση then να ενεργοποιείται ακόμη κι όταν αποτύχουν ορισμένες εργασίες.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
Παρακολούθηση προόδου
Το αντικείμενο τιμής Batch παρέχει ιδιότητες και μεθόδους για την παρακολούθηση της προόδου.
$batch = Queuety::find_batch( $batch_id );
$batch->progress(); // 0-100 percentage
$batch->finished(); // true if all jobs are done
$batch->has_failures(); // true if any job failed
$batch->cancelled(); // true if the batch was cancelled
$batch->total_jobs; // Total number of jobs
$batch->pending_jobs; // Jobs still pending
$batch->failed_jobs; // Number of failed jobs
$batch->failed_job_ids; // Array of failed job IDs
| Μέθοδος/Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
progress() |
int |
Ποσοστό ολοκλήρωσης από 0 έως 100 |
finished() |
bool |
Αν η ομάδα έχει ολοκληρωθεί (όλες οι εργασίες ολοκληρώθηκαν ή απέτυχαν) |
has_failures() |
bool |
Αν απέτυχε κάποια εργασία της ομάδας |
cancelled() |
bool |
Αν η ομάδα ακυρώθηκε |
$total_jobs |
int |
Συνολικός αριθμός εργασιών στην ομάδα |
$pending_jobs |
int |
Αριθμός εργασιών που εκκρεμούν ακόμη |
$failed_jobs |
int |
Αριθμός εργασιών που απέτυχαν |
$failed_job_ids |
array |
Τα ID των εργασιών που απέτυχαν |
$name |
string|null |
Προαιρετικό όνομα ομάδας |
$created_at |
DateTimeImmutable |
Πότε δημιουργήθηκε η ομάδα |
$finished_at |
DateTimeImmutable|null |
Πότε ολοκληρώθηκε η ομάδα |
$cancelled_at |
DateTimeImmutable|null |
Πότε ακυρώθηκε η ομάδα |
Ακύρωση
Ακυρώστε μια ομάδα μέσω του BatchManager. Η ακύρωση μιας ομάδας ορίζει τα cancelled_at και finished_at και ενεργοποιεί την επανάκληση finally.
Queuety::batch_manager()->cancel( $batch_id );
Η ακύρωση επισημαίνει την ομάδα ως ακυρωμένη και ολοκληρωμένη και ενεργοποιεί την επανάκλησή της finally. Δεν επηρεάζει τις εργασίες: οι εκκρεμείς εργασίες σε μια ακυρωμένη ομάδα εξακολουθούν να εκτελούνται, αλλά τα αποτελέσματά τους δεν ενημερώνουν πλέον τους μετρητές της ομάδας ούτε ενεργοποιούν τα then, catch ή finally. Διαγράψτε μόνοι σας τις εργασίες αν δεν πρέπει να εκτελεστούν.
Εύρεση ομάδων
Αναζητήστε μια ομάδα βάσει του ID της:
$batch = Queuety::find_batch( $batch_id );
if ( null === $batch ) {
// Batch not found.
}
Εκκαθάριση παλιών ομάδων
Αφαιρέστε ολοκληρωμένες ομάδες παλαιότερες από έναν καθορισμένο αριθμό ημερών:
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago
Διαγράφονται μόνο ομάδες με μη μηδενική χρονική σήμανση finished_at. Οι ενεργές ομάδες δεν εκκαθαρίζονται ποτέ.