Ga naar de inhoud

Batchverwerking

Met batches kun je een groep taken starten en ze als één geheel volgen. Je kunt callbacks registreren die worden uitgevoerd wanneer de batch is voltooid, wanneer een taak mislukt of wanneer de batch eindigt, ongeacht de uitkomst. Queuety houdt de voortgang, fouten en annuleringsstatus automatisch bij.

Een batch maken

Gebruik Queuety::create_batch() om een BatchBuilder te starten. Geef een array met instanties van Contracts\Job door en roep daarna dispatch() aan om de batchregel en alle taken aan te maken.

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() retourneert een waardeobject van Batch met de batchstatus.

Je kunt ook arrays met handler en inhoud doorgeven in plaats van taakinstanties:

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

Callbacks

Registreer handlerklassen die op verschillende momenten in de levenscyclus van de batch worden aangeroepen. Elke handlerklasse moet een methode handle( Batch $batch ) hebben.

PHP
$batch = Queuety::create_batch( $jobs )
    ->name( 'Import users' )
    ->then( ImportCompleteHandler::class )
    ->catch( ImportFailedHandler::class )
    ->finally( ImportCleanupHandler::class )
    ->dispatch();
Methode Wanneer deze wordt uitgevoerd
then( $handler_class ) Alle taken zijn succesvol voltooid (of allow_failures() is ingesteld)
catch( $handler_class ) De eerste taak in de batch mislukt
finally( $handler_class ) De batch eindigt, ongeacht of deze is geslaagd of mislukt

Een callbackhandler schrijven

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

Fouten toestaan

Standaard wordt de callback then alleen uitgevoerd als alle taken in de batch slagen. Roep allow_failures() aan om de callback then ook uit te laten voeren wanneer sommige taken mislukken.

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

Voortgang bijhouden

Het waardeobject Batch biedt eigenschappen en methoden om de voortgang bij te houden.

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
Methode/eigenschap Type Beschrijving
progress() int Voltooiingspercentage van 0 tot 100
finished() bool Of de batch is beëindigd (alle taken zijn voltooid of mislukt)
has_failures() bool Of er taken in de batch zijn mislukt
cancelled() bool Of de batch is geannuleerd
$total_jobs int Totaalaantal taken in de batch
$pending_jobs int Aantal taken dat nog in behandeling is
$failed_jobs int Aantal mislukte taken
$failed_job_ids array ID's van de mislukte taken
$name string|null Optionele batchnaam
$created_at DateTimeImmutable Tijdstip waarop de batch is gemaakt
$finished_at DateTimeImmutable|null Tijdstip waarop de batch is beëindigd
$cancelled_at DateTimeImmutable|null Tijdstip waarop de batch is geannuleerd

Annuleren

Annuleer een batch via de BatchManager. Door een batch te annuleren worden cancelled_at en finished_at ingesteld en de callback finally uitgevoerd.

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

Door annulering wordt de batch als geannuleerd en beëindigd gemarkeerd en de callback finally uitgevoerd. De taken blijven ongemoeid: taken die nog in behandeling zijn in een geannuleerde batch worden nog uitgevoerd, maar hun resultaten werken de batchtellers niet meer bij en activeren then, catch of finally niet. Verwijder de taken zelf als ze niet mogen worden uitgevoerd.

Batches zoeken

Een batch opzoeken aan de hand van de ID:

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

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

Oude batches opruimen

Verwijder beëindigde batches die ouder zijn dan een opgegeven aantal dagen:

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

Alleen batches met een niet-null finished_at-tijdstempel worden verwijderd. Actieve batches worden nooit opgeruimd.