Gå til indhold

Batchbehandling

Med batches kan du sende en gruppe jobs af sted og følge dem som én samlet enhed. Du kan registrere callbacks, der udløses, når batchen er færdig, når et job fejler, eller når batchen afsluttes uanset udfaldet. Queuety følger automatisk status, fejl og annullering.

Opret en batch

Brug Queuety::create_batch() til at starte en BatchBuilder. Videregiv et array af Contracts\Job-instanser, og kald derefter dispatch() for at oprette batchrækken og alle jobs.

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() returnerer et Batch-værdiobjekt med batchens tilstand.

Du kan også videregive arrays med handler og payload i stedet for jobinstanser:

PHP
$batch = Queuety::create_batch( [
    [ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
    [ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();

Callbacks

Registrér handlerklasser, der skal kaldes på forskellige tidspunkter i batchens livscyklus. Hver handlerklasse skal have en handle( Batch $batch )-metode.

PHP
$batch = Queuety::create_batch( $jobs )
    ->name( 'Import users' )
    ->then( ImportCompleteHandler::class )
    ->catch( ImportFailedHandler::class )
    ->finally( ImportCleanupHandler::class )
    ->dispatch();
Metode Hvornår den udløses
then( $handler_class ) Alle jobs er fuldført (eller allow_failures() er angivet)
catch( $handler_class ) Det første job i batchen fejler
finally( $handler_class ) Batchen afsluttes, uanset om den lykkedes eller fejlede

Skriv en callback-handler

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

Tillad fejl

Som standard udløses then-callbacken kun, hvis alle jobs i batchen lykkes. Kald allow_failures() for at lade then-callbacken blive udløst, selv når nogle jobs fejler.

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

Statusovervågning

Værdielementet Batch indeholder egenskaber og metoder til at følge fremdriften.

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
Metode/egenskab Type Beskrivelse
progress() int Fuldførelsesprocent fra 0 til 100
finished() bool Om batchen er afsluttet (alle jobs er fuldført eller mislykkedes)
has_failures() bool Om nogen jobs i batchen mislykkedes
cancelled() bool Om batchen er blevet annulleret
$total_jobs int Samlet antal jobs i batchen
$pending_jobs int Antal jobs, der stadig venter
$failed_jobs int Antal mislykkede jobs
$failed_job_ids array ID'er på de jobs, der mislykkedes
$name string|null Valgfrit batchnavn
$created_at DateTimeImmutable Tidspunktet, hvor batchen blev oprettet
$finished_at DateTimeImmutable|null Tidspunktet, hvor batchen blev afsluttet
$cancelled_at DateTimeImmutable|null Tidspunktet, hvor batchen blev annulleret

Annullering

Annuller en batch via BatchManager. Når en batch annulleres, sættes cancelled_at og finished_at, og callbacken finally udløses.

PHP
Queuety::batch_manager()->cancel( $batch_id );

En annullering markerer batchen som annulleret og afsluttet og udløser dens callback finally. Den påvirker ikke jobbene: ventende jobs i en annulleret batch kører stadig, men deres resultater opdaterer ikke længere batchens tællere og udløser ikke then, catch eller finally. Slet selv jobbene, hvis de ikke må køre.

Find batches

Slå en batch op efter dens ID:

PHP
$batch = Queuety::find_batch( $batch_id );

if ( null === $batch ) {
    // Batch not found.
}

Ryd op i gamle batches

Fjern afsluttede batches, der er ældre end et angivet antal dage:

PHP
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago

Kun batches med et tidsstempel for finished_at, der ikke er null, slettes. Aktive batches ryddes aldrig op.