Siirry sisältöön

Eräkäsittely

Erien avulla voit lähettää ryhmän töitä ja seurata niitä yhtenä kokonaisuutena. Voit rekisteröidä takaisinkutsuja, jotka suoritetaan, kun erän käsittely valmistuu, jokin työ epäonnistuu tai erä päättyy tuloksesta riippumatta. Queuety seuraa edistymistä, virheitä ja peruutustilaa automaattisesti.

Erän luominen

Käynnistä BatchBuilder käyttämällä Queuety::create_batch(). Välitä taulukko, joka sisältää Contracts\Job-instansseja, ja luo sitten erärivi sekä kaikki työt kutsumalla dispatch().

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() palauttaa Batch-arvo-olion, joka sisältää erän tilan.

Voit välittää työinstanssien sijaan myös käsittelijä- ja hyötykuormataulukoita:

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

Takaisinkutsut

Rekisteröi käsittelijäluokat, joita kutsutaan erän elinkaaren eri vaiheissa. Jokaisessa käsittelijäluokassa on oltava handle( Batch $batch )-metodi.

PHP
$batch = Queuety::create_batch( $jobs )
    ->name( 'Import users' )
    ->then( ImportCompleteHandler::class )
    ->catch( ImportFailedHandler::class )
    ->finally( ImportCleanupHandler::class )
    ->dispatch();
Metodi Suoritusajankohta
then( $handler_class ) Kaikki työt ovat valmistuneet onnistuneesti (tai allow_failures() on asetettu)
catch( $handler_class ) Erän ensimmäinen työ epäonnistuu
finally( $handler_class ) Erä päättyy onnistumisesta tai epäonnistumisesta riippumatta

Takaisinkutsun käsittelijän kirjoittaminen

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

Virheiden salliminen

Oletusarvoisesti then-takaisinkutsu suoritetaan vain, jos kaikki erän työt onnistuvat. Kutsu allow_failures(), jotta then-takaisinkutsu suoritetaan myös silloin, kun osa töistä epäonnistuu.

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

Edistymisen seuranta

Batch-arvo-olio sisältää ominaisuuksia ja metodeja edistymisen seuraamiseen.

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
Metodi/ominaisuus Tyyppi Kuvaus
progress() int Valmistumisprosentti välillä 0–100
finished() bool Onko erä päättynyt (kaikki työt valmistuneet tai epäonnistuneet)
has_failures() bool Epäonnistuiko jokin erän töistä
cancelled() bool Onko erä peruutettu
$total_jobs int Töiden kokonaismäärä erässä
$pending_jobs int Vielä odottavien töiden määrä
$failed_jobs int Epäonnistuneiden töiden määrä
$failed_job_ids array Epäonnistuneiden töiden tunnukset
$name string|null Valinnainen erän nimi
$created_at DateTimeImmutable Erän luontiajankohta
$finished_at DateTimeImmutable|null Erän päättymisajankohta
$cancelled_at DateTimeImmutable|null Erän peruutusajankohta

Peruuttaminen

Peruuta erä BatchManagern kautta. Erän peruuttaminen asettaa cancelled_at- ja finished_at-arvot ja suorittaa finally-takaisinkutsun.

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

Peruutus merkitsee erän peruutetuksi ja päättyneeksi ja suorittaa sen finally-takaisinkutsun. Se ei vaikuta töihin: peruutetun erän odottavat työt suoritetaan silti, mutta niiden tulokset eivät enää päivitä erän laskureita tai käynnistä toimintoja then, catch tai finally. Poista työt itse, jos niitä ei saa suorittaa.

Erien etsiminen

Hae erä sen tunnuksella:

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

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

Vanhojen erien siivoaminen

Poista päättyneet erät, jotka ovat vanhempia kuin määritetty päivien määrä:

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

Vain erät, joiden finished_at-aikaleima ei ole null, poistetaan. Aktiivisia eriä ei koskaan siivota.