İçeriğe geç

WP-Cron Değişimi

Queuety, yerleşik WordPress cron sisteminin yerini alabilir. Etkinleştirildiğinde wp_schedule_event() çağrıları yakalanır ve varsayılan WP-Cron mekanizması yerine Queuety zamanlayıcısına yönlendirilir. Olaylar, site trafiğinden bağımsız yürütme sağlayan Queuety çalışanı tarafından işlenmek üzere tasarlanmıştır.

Mevcut sınırlama: köprü Queuety zamanlamalarını oluşturuyor, ancak çalışan bu zamanlamaların oluşturduğu __queuety_cron_{hook} işleri için bir işleyiciye sahip olmadığından özgün WordPress geri çağrıları hiçbir zaman çalışmıyor. Her iş başarısız oluyor, yeniden deneme gecikmesiyle tekrar deneniyor ve sonunda kuyruğun en arkasına atılıyor (#9). Bu sorun giderilene kadar cron olaylarının çalışması gereken sitelerde köprüyü etkinleştirmeyin.

Değişimi etkinleştirme

Eklentinizi veya temanızı başlatırken Queuety::replace_wp_cron() çağrısını erken yapın:

PHP
use Queuety\Queuety;

Queuety::replace_wp_cron();

Bu genellikle eklentinizin ana dosyasında veya bir plugins_loaded kancasında çağrılır. WordPress yüklenmişken çağrılmalıdır (eklenti etkin olmalıdır).

Neleri yakalar

cron köprüsü, üç WordPress filtresine bağlanır:

WordPress işlevi Bağlanan filtre Davranış
wp_schedule_event() pre_schedule_event Aynı aralıkla bir Queuety zamanlaması oluşturur
wp_unschedule_event() pre_unschedule_event İlgili Queuety zamanlamasını kaldırır
wp_get_scheduled_event() pre_get_scheduled_event Zamanlama verilerini Queuety kaynağından döndürür

Yalnızca hourly, twicedaily, daily gibi bir schedule özelliği olan yinelenen olaylar yakalanır. wp_schedule_single_event() ile zamanlanan tek seferlik olaylar yakalanmaz.

Olaylar nasıl eşlenir

Bir eklenti wp_schedule_event() çağırdığında Queuety, zamanlama adını wp_get_schedules() üzerinden çözümler, işleyici adı __queuety_cron_{hook} olan bir Queuety zamanlaması oluşturur ve özgün WordPress kanca adını ve bağımsız değişkenlerini zamanlama yükünde saklar.

Amaçlanan davranış, bu zamanlanmış işi işleyen Queuety çalışanının özgün kanca adı ve bağımsız değişkenleriyle do_action() çağırması ve mevcut WordPress geri çağrılarının zamanlamayı Queuety belirlerken çalışmasıdır. CronBridge::process_cron_event() bu çağrıyı uygular, ancak henüz hiçbir şey onu çağırmıyor (yukarıdaki sınırlamaya bakın). Zamanlamalar yalnızca uzun süre çalışan wp queuety work süreci tarafından yaklaşık dakikada bir değerlendirilir (bkz. Zamanlama).

Aralık çözümleme

Köprü, önce wp_get_schedules() üzerinden zamanlama adlarını çözümler, ardından yerleşik varsayılanlara başvurur:

Zamanlama adı Aralık
hourly 3,600 saniye
twicedaily 43,200 saniye
daily 86,400 saniye
weekly 604,800 saniye

cron_schedules filtresiyle kaydedilen özel zamanlama aralıkları, wp_get_schedules() bunları döndürdüğü sürece desteklenir.

WP-Cron'yi geri yükleme

Varsayılan WordPress cron sistemine dönmek için:

PHP
Queuety::restore_wp_cron();

Bu işlem filtre kancalarını kaldırır ve WordPress'ın cron olaylarını yeniden yerleşik mekanizmasıyla işlemesini sağlar. Köprü kurulduğunda DISABLE_WP_CRON, true olarak tanımlanır ve çalışma zamanında tanımı kaldırılamaz. Bu nedenle bu sabiti wp-config.php dosyasından kaldırmanız veya süreci yeniden başlatmanız gerekebilir.

Ne zaman kullanılır?

Değişim, en çok sitenizin trafiği düşük olduğunda, WP-Cron'ın sağlayabileceğinden daha güvenilir bir zamanlama gerektiğinde veya zaten Queuety çalışanları çalıştırıp cron yürütmesinin aynı operasyonel sistemde olmasını istediğinizde yararlıdır. Merkezi gözlemlenebilirlik gerektiğinde de yardımcı olur; böylece cron olayları diğer kuyruk işlerinizle aynı günlüklerde ve metriklerde görünür.

Sınırlamalar

Birkaç önemli kısıtlama vardır. Zamanlanmış olayların çalışması için etkin bir Queuety çalışanı gerekir; aksi halde bu olaylar hiç çalışmaz. Yalnızca yinelenen zamanlamalar yakalanır; wp_schedule_single_event() ile oluşturulan tek seferlik olaylar köprünün dışında kalır. replace_wp_cron() ayrıca mevcut PHP sürecinin geri kalanı için DISABLE_WP_CRON tanımlar. Bu nedenle restore_wp_cron() kancaları kaldırsa da sabitin tanımını kaldıramaz. Son olarak köprü yalnızca WordPress yüklüyken çalışır; çünkü WordPress filtrelerine ve do_action() öğesine bağlıdır.

Örnek: tam kurulum

PHP
use Queuety\Queuety;

// In your plugin's main file.
add_action( 'plugins_loaded', function () {
    Queuety::replace_wp_cron();
} );

Burada Queuety::init() çağrısı yapmanız gerekmez: etkin Queuety eklentisi bağlantısını WordPress veritabanı kimlik bilgilerinden oluşturur ve plugins_loaded üzerinde kendini başlatır. replace_wp_cron() yalnızca filtreleri kurduğundan bu işlemin önce yapılmasına bağlı değildir.

Bundan sonra eklentilerin wp_schedule_event() ile kaydettiği yinelenen olaylar Queuety zamanlamaları olarak saklanır. #9 düzeltilene kadar geri çağrıları çalışmaz.