Gruplama
Gruplar, birden fazla işi dağıtıp bunları tek bir birim olarak izlemenizi sağlar. Grup tamamlandığında, herhangi bir iş başarısız olduğunda veya sonuç ne olursa olsun grup sona erdiğinde çalışan geri çağırmalar kaydedebilirsiniz. Queuety ilerlemeyi, hataları ve iptal durumunu otomatik olarak izler.
Grup oluşturma
Bir BatchBuilder başlatmak için Queuety::create_batch() kullanın. Contracts\Job örneklerinden oluşan bir dizi iletin, ardından grup satırını ve tüm işleri oluşturmak için dispatch() çağırın.
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(), grup durumunu içeren bir Batch değer nesnesi döndürür.
İş örnekleri yerine işleyici ve yük dizileri de iletebilirsiniz:
$batch = Queuety::create_batch( [
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 1 ] ],
[ 'handler' => 'import_users', 'payload' => [ 'chunk' => 2 ] ],
] )->dispatch();
Geri çağırmalar
Grup yaşam döngüsünün farklı aşamalarında çağrılacak işleyici sınıflarını kaydedin. Her işleyici sınıfında bir handle( Batch $batch ) yöntemi bulunmalıdır.
$batch = Queuety::create_batch( $jobs )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->dispatch();
| Yöntem | Ne zaman çalışır |
|---|---|
then( $handler_class ) |
Tüm işler başarıyla tamamlandığında (veya allow_failures() ayarlandığında) |
catch( $handler_class ) |
Gruptaki ilk iş başarısız olduğunda |
finally( $handler_class ) |
Başarılı veya başarısız olmasına bakılmaksızın grup sona erdiğinde |
Geri çağırma işleyicisi yazma
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.
}
}
Hatalara izin verme
Varsayılan olarak then geri çağırması yalnızca gruptaki tüm işler başarılı olursa çalışır. Bazı işler başarısız olsa bile then geri çağırmasının çalışmasına izin vermek için allow_failures() çağırın.
$batch = Queuety::create_batch( $jobs )
->then( ReportHandler::class )
->allow_failures()
->dispatch();
İlerleme takibi
Batch değer nesnesi, ilerlemeyi izlemek için özellikler ve yöntemler sağlar.
$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
| Yöntem/Özellik | Tür | Açıklama |
|---|---|---|
progress() |
int |
0 ile 100 arasındaki tamamlanma yüzdesi |
finished() |
bool |
Grubun tamamlanıp tamamlanmadığı (tüm işler tamamlandı veya başarısız oldu) |
has_failures() |
bool |
Gruptaki herhangi bir işin başarısız olup olmadığı |
cancelled() |
bool |
Grubun iptal edilip edilmediği |
$total_jobs |
int |
Gruptaki toplam iş sayısı |
$pending_jobs |
int |
Hâlâ bekleyen iş sayısı |
$failed_jobs |
int |
Başarısız iş sayısı |
$failed_job_ids |
array |
Başarısız işlerin kimlikleri |
$name |
string|null |
İsteğe bağlı grup adı |
$created_at |
DateTimeImmutable |
Grubun oluşturulduğu zaman |
$finished_at |
DateTimeImmutable|null |
Grubun tamamlandığı zaman |
$cancelled_at |
DateTimeImmutable|null |
Grubun iptal edildiği zaman |
İptal
Bir grubu BatchManager üzerinden iptal edin. Grubun iptal edilmesi cancelled_at ve finished_at değerlerini ayarlar ve finally geri çağırmasını çalıştırır.
Queuety::batch_manager()->cancel( $batch_id );
İptal işlemi grubu iptal edilmiş ve tamamlanmış olarak işaretler ve finally geri çağırmasını çalıştırır. İşlere dokunmaz: iptal edilmiş bir grupta bekleyen işler çalışmaya devam eder, ancak sonuçları grup sayaçlarını artık güncellemez ve then, catch veya finally tetiklemez. Çalışmamaları gerekiyorsa işleri kendiniz silin.
Grupları bulma
Bir grubu kimliğiyle arayın:
$batch = Queuety::find_batch( $batch_id );
if ( null === $batch ) {
// Batch not found.
}
Eski grupları temizleme
Belirtilen gün sayısından daha eski, tamamlanmış grupları kaldırın:
$deleted = Queuety::batch_manager()->prune( 30 ); // Delete batches finished > 30 days ago
Yalnızca boş olmayan bir finished_at zaman damgasına sahip gruplar silinir. Etkin gruplar hiçbir zaman temizlenmez.