Spracovanie dávok
Dávky umožňujú odoslať skupinu úloh a sledovať ju ako jeden celok. Môžete zaregistrovať spätné funkcie, ktoré sa spustia po dokončení dávky, pri zlyhaní ľubovoľnej úlohy alebo vždy po skončení dávky bez ohľadu na výsledok. Queuety automaticky sleduje priebeh, zlyhania a stav zrušenia.
Vytvorenie dávky
Na spustenie BatchBuilder použite Queuety::create_batch(). Odovzdajte pole inštancií Contracts\Job a potom zavolajte dispatch(), čím vytvoríte záznam dávky aj všetky úlohy.
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() vracia objekt hodnoty Batch so stavom dávky.
Namiesto inštancií úloh môžete odovzdať aj polia obslužná trieda + údaje:
$batch = Queuety::create_batch( [
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();
Spätné funkcie
Zaregistrujte triedy obslužných funkcií, ktoré sa majú volať v rôznych fázach životného cyklu dávky. Každá trieda musí mať metódu handle( Batch $batch ).
$batch = Queuety::create_batch( $jobs )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->dispatch();
| Metóda | Kedy sa spustí |
|---|---|
then( $handler_class ) |
Po úspešnom dokončení všetkých úloh (alebo pri nastavení allow_failures()) |
catch( $handler_class ) |
Pri zlyhaní prvej úlohy v dávke |
finally( $handler_class ) |
Po skončení dávky bez ohľadu na to, či uspela alebo zlyhala |
Písanie obslužnej triedy spätnej funkcie
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.
}
}
Povolenie zlyhaní
Predvolene sa spätná funkcia then spustí iba vtedy, keď uspejú všetky úlohy v dávke. Zavolajte allow_failures(), ak chcete, aby sa spätná funkcia then spustila aj pri zlyhaní niektorých úloh.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
Sledovanie priebehu
Objekt hodnoty Batch poskytuje vlastnosti a metódy na sledovanie priebehu.
$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
| Metóda/vlastnosť | Typ | Opis |
|---|---|---|
progress() |
int |
Percento dokončenia od 0 do 100 |
finished() |
bool |
Informuje, či sa dávka skončila (všetky úlohy boli dokončené alebo zlyhali) |
has_failures() |
bool |
Informuje, či zlyhala niektorá úloha v dávke |
cancelled() |
bool |
Informuje, či bola dávka zrušená |
$total_jobs |
int |
Celkový počet úloh v dávke |
$pending_jobs |
int |
Počet úloh, ktoré ešte čakajú na spracovanie |
$failed_jobs |
int |
Počet neúspešných úloh |
$failed_job_ids |
array |
ID neúspešných úloh |
$name |
string|null |
Voliteľný názov dávky |
$created_at |
DateTimeImmutable |
Čas vytvorenia dávky |
$finished_at |
DateTimeImmutable|null |
Čas skončenia dávky |
$cancelled_at |
DateTimeImmutable|null |
Čas zrušenia dávky |
Zrušenie
Dávku zrušíte cez BatchManager. Zrušením dávky sa nastavia cancelled_at a finished_at a spustí sa spätná funkcia finally.
Queuety::batch_manager()->cancel( $batch_id );
Zrušenie označí dávku ako zrušenú a dokončenú a spustí jej spätnú funkciu finally. Úloh sa nedotkne: čakajúce úlohy v zrušenej dávke sa naďalej vykonajú, ale ich výsledky už neaktualizujú počítadlá dávky ani nespúšťajú then, catch alebo finally. Ak sa úlohy nemajú vykonať, odstráňte ich sami.
Vyhľadanie dávok
Vyhľadajte dávku podľa jej ID:
$batch = Queuety::find_batch( $batch_id );
if ( null === $batch ) {
// Batch not found.
}
Odstránenie starých dávok
Odstráňte dokončené dávky staršie než zadaný počet dní:
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago
Odstránia sa iba dávky s časovou pečiatkou finished_at, ktorá nie je null. Aktívne dávky sa nikdy neodstraňujú.