Preskočiť na obsah

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.

PHP
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:

PHP
$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 ).

PHP
$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

PHP
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.

PHP
$batch = Queuety::create_batch( $jobs )
    ->then( ReportHandler::class )
    ->allow_failures()
    ->dispatch();

Sledovanie priebehu

Objekt hodnoty Batch poskytuje vlastnosti a metódy na sledovanie priebehu.

PHP
$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.

PHP
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:

PHP
$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í:

PHP
$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ú.