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