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().
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:
$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.
$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
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.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
Edistymisen seuranta
Batch-arvo-olio sisältää ominaisuuksia ja metodeja edistymisen seuraamiseen.
$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.
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:
$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ä:
$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.