Queuety
WordPress iş akışı motoru.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateEn son sürüm v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );Uygulamada
PHP içinde tanımlanan bir iş akışı ve onu çalıştıran çalışan komutu.
Bir onay iş akışı
İş akışı bir adım çalıştırır, 24 saat bekler ve ardından wait_for_approval() noktasında duraklayarak başka bir sürecin approval sinyalini göndermesini bekler.
Gecikme veritabanında saklanır; böylece çalışan yeniden başlatmalarına ve dağıtımlara dayanır. Erken gönderilen sinyal kaydedilir ve iş akışı bekleme noktasına geldiğinde alınır. Çalışmayı iptal etmek on_cancel() işleyicisini çağırır.
$workflow_id = Queuety::workflow( 'approval_flow' )
->then( SubmitRequestHandler::class )
->delay( hours: 24 )
->wait_for_approval()
->then( ProcessApprovalHandler::class )
->on_cancel( CleanupHandler::class )
->dispatch( [ 'request_id' => 99 ] );
// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );# Single worker on default queue
wp queuety work
# Process a specific queue
wp queuety work --queue=emails
# Process multiple queues in priority order
wp queuety work --queue=critical,default,low
# One-shot mode
wp queuety work --once
# Multi-worker mode
wp queuety work --workers=4
# Adaptive worker pool
wp queuety work --queue=providers --min-workers=2 --max-workers=6Doğrudan MySQL Talebi
Her çalışan uzun ömürlü bir WP-CLI sürecinde çalışır ve işleri doğrudan MySQL üzerinden FOR UPDATE SKIP LOCKED ile alır.
Kalıcı İş Akışları
PHP zaman aşımlarına, çökmelere ve yeniden denemelere dayanıklı, durumu korunan çok adımlı süreçler.
Durum Makineleri
Queuety::machine() ile uzun ömürlü, olay odaklı durum: durumları ve geçişleri tanımlayın, olay gönderin, zaman çizelgesini okuyun.
Sinyaller ve Onaylar
wait_for_signal(), wait_for_approval() ve wait_for_input(), harici girdi gelene kadar iş akışını duraklatır.
Öncelik Düzeyleri
Düşük'ten Acil'e dört düzey. Bir kuyrukta, önceliği yüksek işler önce alınır.
Hız Sınırlama
Kayan zaman aralığında işleyici başına sınırlar. Hız sınırına tabi bir işi alan çalışan, işi kuyruğa geri koyup bekler.
Yinelenen İşler
Aralık ve cron tabanlı zamanlama. Harici bağımlılığı olmayan yerleşik cron ayrıştırıcısı.
Paralel Adımlar
İş akışı adımlarını eşzamanlı çalıştırın ve ilerlemeden önce tümünün tamamlanmasını bekleyin.
Metrikler ve Günlük Kaydı
İşleyici başına iş hacmini, ortalama ve p95 süreyi ve hata oranını içeren kalıcı veritabanı günlüğü.
WP-Cron Yedek Çözümü
Kabuk erişimi olmadığında, dakikada bir çalışan WordPress cron olayı, varsayılan kuyruk için tek seferlik bir çalışan başlatır.
Ara Katman
Hız sınırları, istisna kısıtlaması, benzersizlik, zaman aşımları ve çakışma koruması için soğan tarzı iş ara katmanı.
PHP 8.2+
Enum'lar, salt okunur sınıflar, match ifadeleri, yapıcı tanıtımı ve PHP öznitelikleri.
Queuety neden tercih edilmeli
Durum MySQL içinde tutulur
Kuyruk satırları, iş akışı durumu, günlükler, sinyaller ve akış halinde iletilen parçalar MySQL içinde saklanır; bu nedenle çalışan yeniden başlatıldığında hiçbir düzenleme durumu kaybolmaz. Her adım sınırında durum güncellemesi, işin tamamlanması ve sonraki işin kuyruğa eklenmesi tek bir işlemde kaydedilir.
Sayfa isteğinin dışında
WP-Cron yalnızca sayfa ziyaretlerinde tetiklenir ve 60 saniyelik bir LLM çağrısı, 30 saniyelik PHP zaman aşımıyla sonlandırılır. Queuety çalışanları uzun süre çalışan bir WP-CLI sürecinde çalışır ve trafik beklemeden işleri alır.
Aracı çalıştırmaları için güvenlik önlemleri
Karar yeter sayısı modu, onay kapıları ve max_transitions() ile max_state_bytes() gibi sınırları olan for_each(), uzun aracı çalıştırmalarını tanımlı bir kapsamda tutar.
WordPress dışında da kullanılabilir
Veritabanı destekli çekirdek, aynı veritabanına bağlanabilen her PHP sürecinde çalışır; böylece başka bir uygulama işleri dağıtabilir, sinyal gönderebilir ve iş akışı durumunu okuyabilir. Eylem tetikleyicileri, WP-Cron köprüsü ve WP-CLI komutları için yine de WordPress gerekir.
Karşılaştırma
Queuety, geliştiricilerin zaten aşina olduğu WordPress zamanlayıcıları ve iş akışı motorlarıyla nasıl ilişkilidir?
| Araç | Şu konularda başarılı | Queuety ile farkı |
|---|---|---|
| WP-Cron | Şu konularda başarılıWordPress içine yerleşiktir; paylaşımlı barındırmada sistem zamanlayıcısına erişim gerekmez. Zamanında çalışmayan bir görev atılmak yerine sonraki sayfa yüklemesinde çalışır. | Queuety ile farkıQueuety çalışanları site trafiğinden bağımsız çalışır ve uzun süre çalışan bir wp queuety work süreci gerektirir. WP-Cron köprüsü yinelenen olayları zamanlamaya dönüştürür, ancak bu olayların kanca geri çağırmalarını henüz çalıştırmaz; bu nedenle bunları yönetmeye WP-Cron devam eder. |
| Action Scheduler | Şu konularda başarılıSunucu erişimi gerektirmeden eklenti ve temalarda dağıtılmak üzere tasarlanmıştır. Her ay Abonelikler için milyonlarca ödemeyi ve WooCommerce web kancalarını işler; her eylemi bir yönetici arayüzünde kaydeder. | Queuety ile farkıAction Scheduler, gecikmeli bir do_action() gibi, bir kancayı daha sonraki bir zamanda çalıştırır. Queuety ise adımlar arasında durumu korunan çok adımlı iş akışları, sinyal ve onay beklemeleri ile durum makineleri ekler; bunları wp queuety workflow timeline gibi WP-CLI komutlarıyla inceleyebilirsiniz. |
| Temporal | Şu konularda başarılıKalıcı bir yürütme platformudur: Olay Geçmişi, iş akışının her adımını kaydeder; böylece çökme veya kesinti sonrasında bir çalıştırma kaydedilen son olaydan devam eder. Temporal Cloud, hizmeti kendiniz barındırmaya alternatif olarak sunulur. | Queuety ile farkıBir Temporal Hizmeti, uygulamanızın yanında çalışan bir Go sunucusu ile veritabanından oluşur. Queuety, durumunu WordPress veritabanı bağlantısındaki MySQL tablolarında tutar ve çalışanları WP-CLI üzerinden çalıştırır. |
Sorular ve yanıtlar
Queuety dokümantasyonundan kısa yanıtlar.
Varsayılan kuyruktaki basit işler için gerekmez. WordPress cron tetiklendiği sürece eklenti, her dakika WordPress cron aracılığıyla tek seferlik bir çalışan başlatır ve her çalıştırmada bir iş işler. Yinelenen zamanlamalar, özel kuyruklar ve daha düşük gecikme için özel bir wp queuety work süreci gerekir.
Hayır. mysqli veya pdo_mysql gerekir; WordPress altında varsayılan olarak mysqli seçilir. Sürücüyü zorunlu kılmak için QUEUETY_DB_DRIVER değerini auto, mysqli veya pdo olarak tanımlayın.
İşler SELECT ... FOR UPDATE SKIP LOCKED ile alınır; bu özellik MySQL sürüm 8.0'dan, MariaDB ise 10.6'dan itibaren desteklenir. Projenin CI süreci MySQL 8.0 üzerinde çalışır.
Evet. Veritabanı destekli çekirdek; işler, çalışanlar, iş akışları, sinyaller, durum makineleri, yapıtlar, günlükler, metrikler ve zamanlamalar doğrudan bir Connection üzerinden çalışır. Çalışan havuzları için ayrıca DB_HOST, DB_NAME, DB_USER ve DB_PASSWORD sabitleri gerekir. Queuety::on_action(), replace_wp_cron(), eklenti önyüklemesi ve wp queuety komutları için yine WordPress gerekir.
Henüz değil. Queuety::replace_wp_cron(), yinelenen wp_schedule_event() olaylarını Queuety zamanlamalarına dönüştürür; ancak bunların kanca geri çağırmaları henüz çalışmaz. Bu nedenle tetiklenmesi gereken olaylar için WP-Cron kullanmaya devam edin. wp_schedule_single_event() kaynaklı olayları WP-Cron yönetir.
wp queuety work --workers=N sabit bir havuz oluşturur ve çöken alt süreçleri yeniden başlatır; bunun için pcntl ve posix uzantıları gerekir. --min-workers ve --max-workers, bekleyen iş sayısı arttıkça büyüyen ve azaldıkça küçülen uyarlanabilir bir havuz çalıştırır.
Eklentiyi yükleyin, bir çalışan başlatın ve ilk işinizden onay iş akışlarına ve durum makinelerine kadar kılavuzları izleyin.