Dávkové zpracování
Dávky umožňují spustit skupinu úloh a sledovat ji jako jeden celek. Můžete registrovat zpětná volání, která se spustí při dokončení dávky, při selhání kterékoli úlohy nebo při dokončení dávky bez ohledu na výsledek. Queuety automaticky sleduje průběh, chyby a stav zrušení.
Vytvoření dávky
Pomocí Queuety::create_batch() zahajte BatchBuilder. Předávejte pole instancí Contracts\Job a poté voláním dispatch() vytvořte záznam dávky i všechny úlohy.
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() vrací objekt s hodnotou Batch a stavem dávky.
Místo instancí úloh můžete předat také pole dvojic obslužná rutina + data:
$batch = Queuety::create_batch( [
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();
Zpětná volání
Zaregistrujte třídy obslužných rutin, které se mají volat v různých fázích životního cyklu dávky. Každá třída obslužné rutiny musí mít metodu handle( Batch $batch ).
$batch = Queuety::create_batch( $jobs )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->dispatch();
| Metoda | Kdy se spustí |
|---|---|
then( $handler_class ) |
Všechny úlohy byly úspěšně dokončeny (nebo je nastaveno allow_failures()) |
catch( $handler_class ) |
První úloha v dávce selže |
finally( $handler_class ) |
Dávka se dokončí, ať už úspěšně, nebo neúspěšně |
Vytvoření obslužné rutiny zpětného volání
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.
}
}
Povolení chyb
Ve výchozím nastavení se zpětné volání then spustí pouze tehdy, když uspějí všechny úlohy v dávce. Voláním allow_failures() umožníte spuštění zpětného volání then i při selhání některých úloh.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
Sledování průběhu
Objekt hodnoty Batch poskytuje vlastnosti a metody pro sledování průběhu.
$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
| Metoda/vlastnost | Typ | Popis |
|---|---|---|
progress() |
int |
Procento dokončení od 0 do 100 |
finished() |
bool |
Zda je dávka dokončena (všechny úlohy byly dokončeny nebo selhaly) |
has_failures() |
bool |
Zda některá úloha v dávce selhala |
cancelled() |
bool |
Zda byla dávka zrušena |
$total_jobs |
int |
Celkový počet úloh v dávce |
$pending_jobs |
int |
Počet dosud čekajících úloh |
$failed_jobs |
int |
Počet neúspěšných úloh |
$failed_job_ids |
array |
ID neúspěšných úloh |
$name |
string|null |
Volitelný název dávky |
$created_at |
DateTimeImmutable |
Kdy byla dávka vytvořena |
$finished_at |
DateTimeImmutable|null |
Kdy byla dávka dokončena |
$cancelled_at |
DateTimeImmutable|null |
Kdy byla dávka zrušena |
Zrušení
Dávku zrušíte prostřednictvím BatchManager. Zrušením dávky se nastaví cancelled_at a finished_at a spustí se zpětné volání finally.
Queuety::batch_manager()->cancel( $batch_id );
Zrušení označí dávku jako zrušenou a dokončenou a spustí její zpětné volání finally. Úloh se nedotkne: čekající úlohy ve zrušené dávce se přesto spustí, ale jejich výsledky už neaktualizují počítadla dávky ani nespouštějí then, catch nebo finally. Pokud se úlohy nemají spustit, odstraňte je sami.
Vyhledání dávek
Vyhledejte dávku podle jejího ID:
$batch = Queuety::find_batch( $batch_id );
if ( null === $batch ) {
// Batch not found.
}
Odstranění starých dávek
Odstraňte dokončené dávky starší než zadaný počet dní:
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago
Odstraní se pouze dávky s časovým razítkem finished_at, které není null. Aktivní dávky se nikdy neodstraňují.