Przejdź do treści

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.

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() zwraca obiekt wartości Batch ze stanem partii.

Możesz też przekazać tablice handler+ładunek zamiast instancji zadań:

PHP
$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 ).

PHP
$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

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

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.

PHP
$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.

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

PHP
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:

PHP
$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:

PHP
$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.