Zamanlama
Queuety, yinelenen işler için yerleşik destek sunar. wp_cron kullanmak yerine zamanlamalar veritabanında saklanır ve uzun süre çalışan bir wp queuety work süreci (veya çalışan havuzunun üst süreci) tarafından yaklaşık dakikada bir değerlendirilir. wp queuety work --once, wp queuety flush ve eklentinin yerleşik WP-Cron yedeği zamanlamaları değerlendirmez (#14); uzun süre çalışan bir çalışan yoksa wp queuety schedule run komutunu kendiniz çalıştırın.
Aralıkla zamanlama
Basit aralık tabanlı zamanlamalar için every() kullanın. İfade, PHP tarafından kullanılan DateTimeImmutable::modify() ile uyumlu herhangi bir dize olabilir:
use Queuety\Queuety;
Queuety::schedule( 'cleanup_handler' )
->every( '1 hour' )
->on_queue( 'maintenance' );
Queuety::schedule( 'sync_inventory' )
->every( '30 minutes' )
->on_queue( 'sync' );
Queuety::schedule( 'daily_report', [ 'type' => 'summary' ] )
->every( '1 day' );
Cron zamanlaması
Standart 5 alanlı cron ifadeleri için cron() kullanın:
// Every day at 3am
Queuety::schedule( 'nightly_cleanup' )
->cron( '0 3 * * *' );
// Every Monday at 9am
Queuety::schedule( 'weekly_digest' )
->cron( '0 9 * * 1' )
->on_queue( 'emails' );
// Every 15 minutes
Queuety::schedule( 'health_check' )
->cron( '*/15 * * * *' );
Zamanlama seçenekleri
PendingSchedule oluşturucusu şu yöntemleri destekler:
| Yöntem | Açıklama |
|---|---|
every( string $interval ) |
Bir aralık ifadesi ayarlar |
cron( string $expression ) |
Bir cron ifadesi ayarlar |
on_queue( string $queue ) |
Hedef kuyruğu ayarlar (varsayılan: 'default') |
overlap( OverlapPolicy $policy ) |
Çakışma politikasını ayarlar (varsayılan: Allow) |
Zamanlama dağıtılmadan önce every() veya cron() çağrılmalıdır. İkisi de ayarlanmazsa RuntimeException fırlatılır.
Çakışma politikaları
Sonraki zamanlama anı geldiğinde zamanlanmış bir iş hâlâ çalışıyorsa (beklemede veya işleniyor), ne olacağını çakışma politikası belirler. Politikayı overlap() yöntemiyle ayarlayın:
use Queuety\Queuety;
use Queuety\Enums\OverlapPolicy;
Queuety::schedule( 'sync_inventory' )
->every( '5 minutes' )
->overlap( OverlapPolicy::Skip )
->on_queue( 'sync' );
OverlapPolicy enum'u üç durum içerir:
| Politika | Değer | Davranış |
|---|---|---|
OverlapPolicy::Allow |
allow |
Önceki çalıştırma hâlâ etkin olsa bile her zaman yeni bir iş dağıtılır. Bu varsayılan davranıştır. |
OverlapPolicy::Skip |
skip |
İşleyicinin beklemede veya işlenmekte olan işleri varsa mevcut zamanlama anı atlanır. Zamanlamanın düzeni korunacak şekilde next_run normal biçimde güncellenir. |
OverlapPolicy::Buffer |
buffer |
Skip'te olduğu gibi zamanlama anı dağıtılmaz ve next_run bir sonraki olağan zamana ilerler. Skip'ten farklı olarak last_run güncellenmez. |
Allow (varsayılan)
Aynı işleyicinin birden fazla örneği eşzamanlı çalışabilir. Çakışmanın sorun yaratmadığı, yinelenmesi güvenli işleyiciler için bunu kullanın.
Queuety::schedule( 'send_heartbeat_ping' )
->every( '1 minute' )
->overlap( OverlapPolicy::Allow );
Skip
İşleyici hâlâ çalışıyorsa zamanlama anı sessizce atlanır. İkinci bir örneği çalıştırmanın kaynak israfına veya çakışmalara yol açacağı işleyiciler için bunu kullanın.
Queuety::schedule( 'rebuild_search_index' )
->every( '10 minutes' )
->overlap( OverlapPolicy::Skip );
Buffer
Şimdilik Skip gibi davranır: işleyicinin beklemede veya işlenmekte olan bir işi varsa zamanlama anı dağıtılmaz ve next_run bir sonraki olağan zamana ilerler. Tek fark, Buffer'ın last_run değerini değiştirmemesi, Skip'in ise atlanan zamanlama anını son çalıştırma olarak kaydetmesidir.
Queuety::schedule( 'sync_inventory' )
->every( '5 minutes' )
->overlap( OverlapPolicy::Buffer );
Nasıl çalışır
Bir zamanlama oluşturulduğunda Queuety; ifadeyi, işleyiciyi, yükü ve hesaplanan bir sonraki çalıştırma zamanını queuety_schedules tablosunda saklar.
Her zamanlayıcı adımında (uzun süre çalışan bir çalışanda yaklaşık dakikada bir veya wp queuety schedule run komutunu çalıştırdığınızda) zamanlayıcı, next_run zamanı geçmiş zamanlamaları denetler. Zamanı gelen her zamanlama için yeni bir iş dağıtır ve next_run değerini bir sonraki zamana günceller.
Zamanlamaları CLI ile yönetme
# List all schedules
wp queuety schedule list
# Add a recurring schedule
wp queuety schedule add cleanup_handler --every="1 hour"
wp queuety schedule add nightly_report --cron="0 3 * * *" --queue=reports
# Remove a schedule
wp queuety schedule remove cleanup_handler
# Manually trigger the scheduler
wp queuety schedule run
Zamanlamaları PHP ile yönetme
// Get the scheduler instance
$scheduler = Queuety::scheduler();
// List all schedules
$schedules = $scheduler->list();
// Remove a schedule by handler name
$scheduler->remove( 'cleanup_handler' );
// Manually trigger a tick
$count = $scheduler->tick();
Yük
Zamanlamalara, dağıtılan her işe aktarılacak statik bir yük eklenebilir:
Queuety::schedule( 'generate_report', [ 'type' => 'daily', 'format' => 'pdf' ] )
->every( '1 day' )
->on_queue( 'reports' );
Zamanlama her tetiklendiğinde bu yükle yeni bir iş dağıtılır.