Przetwarzanie wsadowe
Partie umożliwiają wysłanie grupy zadań i śledzenie ich jako jednej całości. Możesz zarejestrować wywołania zwrotne uruchamiane po ukończeniu partii, niepowodzeniu dowolnego zadania lub zakończeniu partii niezależnie od wyniku. Queuety automatycznie śledzi postęp, błędy i stan anulowania.
Tworzenie partii
Użyj Queuety::create_batch(), aby rozpocząć BatchBuilder. Przekaż tablicę instancji Contracts\Job, a następnie wywołaj dispatch(), aby utworzyć rekord partii i wszystkie zadania.
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() zwraca obiekt wartości Batch ze stanem partii.
Możesz też przekazać tablice handler+ładunek zamiast instancji zadań:
$batch = Queuety::create_batch( [
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();
Wywołania zwrotne
Zarejestruj klasy handlerów wywoływane na różnych etapach cyklu życia partii. Każda klasa handlera musi mieć metodę handle( Batch $batch ).
$batch = Queuety::create_batch( $jobs )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->dispatch();
| Metoda | Kiedy jest wywoływana |
|---|---|
then( $handler_class ) |
Wszystkie zadania zakończyły się powodzeniem (lub ustawiono allow_failures()) |
catch( $handler_class ) |
Pierwsze zadanie w partii zakończyło się niepowodzeniem |
finally( $handler_class ) |
Partia została zakończona, niezależnie od powodzenia lub błędu |
Tworzenie handlera wywołania zwrotnego
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.
}
}
Zezwalanie na błędy
Domyślnie wywołanie zwrotne then jest uruchamiane tylko wtedy, gdy wszystkie zadania w partii zakończą się powodzeniem. Wywołaj allow_failures(), aby uruchamiać wywołanie zwrotne then także wtedy, gdy niektóre zadania zakończą się niepowodzeniem.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
Śledzenie postępów
Obiekt wartości Batch udostępnia właściwości i metody do śledzenia postępów.
$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/właściwość | Typ | Opis |
|---|---|---|
progress() |
int |
Procent ukończenia od 0 do 100 |
finished() |
bool |
Czy partia została zakończona (wszystkie zadania ukończone lub zakończone błędem) |
has_failures() |
bool |
Czy jakiekolwiek zadania w partii zakończyły się błędem |
cancelled() |
bool |
Czy partia została anulowana |
$total_jobs |
int |
Łączna liczba zadań w partii |
$pending_jobs |
int |
Liczba zadań oczekujących |
$failed_jobs |
int |
Liczba zadań zakończonych błędem |
$failed_job_ids |
array |
Identyfikatory zadań, które zakończyły się błędem |
$name |
string|null |
Opcjonalna nazwa partii |
$created_at |
DateTimeImmutable |
Czas utworzenia partii |
$finished_at |
DateTimeImmutable|null |
Czas zakończenia partii |
$cancelled_at |
DateTimeImmutable|null |
Czas anulowania partii |
Anulowanie
Anuluj partię za pomocą BatchManager. Anulowanie partii ustawia cancelled_at i finished_at oraz uruchamia wywołanie zwrotne finally.
Queuety::batch_manager()->cancel( $batch_id );
Anulowanie oznacza partię jako anulowaną i zakończoną oraz uruchamia jej wywołanie zwrotne finally. Nie wpływa na zadania: oczekujące zadania w anulowanej partii nadal zostaną wykonane, ale ich wyniki nie będą już aktualizować liczników partii ani uruchamiać then, catch lub finally. Jeśli zadania nie powinny być wykonane, usuń je samodzielnie.
Wyszukiwanie partii
Wyszukaj partię według jej identyfikatora:
$batch = Queuety::find_batch( $batch_id );
if ( null === $batch ) {
// Batch not found.
}
Usuwanie starych partii
Usuń zakończone partie starsze niż określona liczba dni:
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago
Usuwane są tylko partie z niepustym znacznikiem czasu finished_at. Aktywne partie nigdy nie są usuwane.