Paketttöötlus
Paketid võimaldavad saata välja töörühma ja jälgida neid ühe tervikuna. Saad registreerida tagasihelistusi, mis käivituvad paketi edukal lõpetamisel, mis tahes töö ebaõnnestumisel või paketi lõppemisel tulemusest olenemata. Queuety jälgib automaatselt edenemist, tõrkeid ja tühistamisolekut.
Paketi loomine
Kasuta Queuety::create_batch(), et alustada BatchBuilder. Edasta Contracts\Job eksemplaride massiiv ja seejärel loo paketi kirje ning kõik tööd, kutsudes välja 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() tagastab väärtusobjekti Batch koos paketi olekuga.
Tööeksemplaride asemel saad edastada ka töötleja ja kasuliku koorma massiive:
$batch = Queuety::create_batch( [
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();
Tagasihelistused
Registreeri töötlejaklassid, mida kutsutakse paketi elutsükli eri etappides. Igal töötlejaklassil peab olema meetod handle( Batch $batch ).
$batch = Queuety::create_batch( $jobs )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->dispatch();
| Meetod | Käivitamise aeg |
|---|---|
then( $handler_class ) |
Kõik tööd valmisid edukalt (või määrati allow_failures()) |
catch( $handler_class ) |
Paketi esimene töö ebaõnnestub |
finally( $handler_class ) |
Pakett lõpeb, olenemata õnnestumisest või ebaõnnestumisest |
Tagasihelistuse töötleja kirjutamine
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.
}
}
Tõrgete lubamine
Vaikimisi käivitub tagasihelistus then ainult siis, kui kõik paketi tööd õnnestuvad. Kutsu välja allow_failures(), et lubada tagasihelistuse then käivitumine ka mõne töö ebaõnnestumisel.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
Edenemise jälgimine
Väärtusobjekt Batch pakub edenemise jälgimiseks atribuute ja meetodeid.
$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
| Meetod/atribuut | Tüüp | Kirjeldus |
|---|---|---|
progress() |
int |
Lõpetatuse protsent vahemikus 0 kuni 100 |
finished() |
bool |
Kas pakett on lõpetatud (kõik tööd on valmis või ebaõnnestunud) |
has_failures() |
bool |
Kas mõni paketi töödest ebaõnnestus |
cancelled() |
bool |
Kas pakett on tühistatud |
$total_jobs |
int |
Paketi tööde koguarv |
$pending_jobs |
int |
Ootel tööde arv |
$failed_jobs |
int |
Ebaõnnestunud tööde arv |
$failed_job_ids |
array |
Ebaõnnestunud tööde ID-d |
$name |
string|null |
Valikuline paketi nimi |
$created_at |
DateTimeImmutable |
Paketi loomise aeg |
$finished_at |
DateTimeImmutable|null |
Paketi lõpetamise aeg |
$cancelled_at |
DateTimeImmutable|null |
Paketi tühistamise aeg |
Tühistamine
Tühista pakett käsu BatchManager kaudu. Paketi tühistamine määrab väärtused cancelled_at ja finished_at ning käivitab tagasihelistuse finally.
Queuety::batch_manager()->cancel( $batch_id );
Tühistamine märgib paketi tühistatuks ja lõpetatuks ning käivitab selle tagasihelistuse finally. See ei mõjuta töid: tühistatud paketi ootel tööd käivituvad endiselt, kuid nende tulemused ei uuenda enam paketi loendureid ega käivita then, catch või finally. Kui tööd ei tohi käivituda, kustuta need ise.
Pakettide leidmine
Otsi paketti selle ID järgi:
$batch = Queuety::find_batch( $batch_id );
if ( null === $batch ) {
// Batch not found.
}
Vanade pakettide kärpimine
Eemalda lõpetatud paketid, mis on määratud päevade arvust vanemad:
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago
Kustutatakse ainult paketid, mille ajatempel finished_at pole null. Aktiivseid pakette ei kärbita kunagi.