İçeriğe geç

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:

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

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

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

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

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

PHP
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

Kabuk
# 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

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

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