Queuety
Mesin alur kerja WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateRilis terbaru 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!',
] );Dalam praktik
Alur kerja yang ditentukan di PHP dan perintah worker yang menjalankannya.
Alur kerja persetujuan
Alur kerja menjalankan satu langkah, menunggu 24 hours, lalu berhenti di wait_for_approval() hingga proses lain mengirim sinyal approval.
Jeda disimpan di database, sehingga tetap ada setelah worker dimulai ulang dan penerapan versi baru; sinyal yang dikirim lebih awal dicatat dan diproses saat alur kerja mencapai waktu tunggu. Membatalkan proses akan memanggil handler on_cancel().
$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=6Klaim MySQL langsung
Setiap worker berjalan dalam proses WP-CLI jangka panjang dan mengambil job langsung dari MySQL dengan FOR UPDATE SKIP LOCKED.
Alur Kerja Tahan Lama
Proses multi-langkah dengan status persisten yang tetap bertahan saat terjadi timeout PHP, crash, dan percobaan ulang.
Mesin Status
Status berbasis peristiwa yang bertahan lama dengan Queuety::machine(): tentukan status dan transisi, kirim peristiwa, baca linimasa.
Sinyal dan Persetujuan
wait_for_signal(), wait_for_approval(), dan wait_for_input() menjeda alur kerja hingga input eksternal diterima.
Tingkat Prioritas
Empat tingkat, dari Rendah hingga Mendesak. Dalam satu antrean, job dengan prioritas lebih tinggi diambil lebih dahulu.
Pembatasan Laju
Batas per handler dalam jendela bergulir. Worker yang mengambil job dengan batas laju akan mengembalikannya ke antrean lalu menunggu.
Job Berulang
Penjadwalan berbasis interval dan cron. Parser cron bawaan tanpa dependensi eksternal.
Langkah Paralel
Jalankan langkah alur kerja secara bersamaan dan tunggu hingga semuanya selesai sebelum melanjutkan.
Metrik & Pencatatan
Log database permanen dengan throughput, durasi rata-rata dan p95, serta tingkat kesalahan per handler.
Fallback WP-Cron
Tanpa akses shell, peristiwa WordPress cron yang berjalan sekali per menit menjalankan worker satu kali untuk antrean default.
Middleware
Middleware job bergaya onion untuk batas laju, pembatasan pengecualian, keunikan, timeout, dan perlindungan dari tumpang tindih.
PHP 8.2+
Enum, kelas readonly, ekspresi match, promosi konstruktor, dan atribut PHP.
Mengapa Queuety
Status tersimpan di MySQL
Baris antrean, status alur kerja, log, sinyal, dan potongan streaming disimpan di MySQL, sehingga restart worker tidak menghilangkan status orkestrasi. Di setiap batas langkah, pembaruan status, penyelesaian job, dan penambahan job berikutnya dilakukan dalam satu transaksi.
Di luar permintaan halaman
WP-Cron hanya berjalan saat halaman dikunjungi, dan panggilan LLM selama 60 detik dihentikan oleh timeout PHP 30 detik. Worker Queuety berjalan dalam proses WP-CLI jangka panjang dan mengambil pekerjaan tanpa menunggu lalu lintas.
Pengaman untuk proses agen
for_each() dengan mode kuorum, gerbang persetujuan, dan batas seperti max_transitions() dan max_state_bytes() menjaga agar proses agen yang berjalan lama tetap dalam batas yang ditentukan.
Dapat digunakan di luar WordPress
Inti berbasis database berjalan dalam proses PHP apa pun yang dapat membuka database yang sama, sehingga aplikasi lain dapat menjalankan job, mengirim sinyal, dan membaca status alur kerja. Pemicu tindakan, bridge WP-Cron, dan perintah WP-CLI tetap memerlukan WordPress.
Dibandingkan dengan
Bagaimana Queuety berhubungan dengan penjadwal dan mesin alur kerja yang sudah dikenal para pengembang WordPress.
| Alat | Keunggulan | Perbedaan dengan Queuety |
|---|---|---|
| WP-Cron | KeunggulanTerintegrasi di WordPress, fitur ini tidak memerlukan akses ke penjadwal sistem di hosting bersama, dan tugas yang terlewat waktunya akan berjalan saat pemuatan halaman berikutnya, alih-alih dihilangkan. | Perbedaan dengan QueuetyWorker Queuety berjalan secara independen dari lalu lintas situs dan memerlukan proses wp queuety work yang berjalan lama. Bridge WP-Cron mengubah peristiwa berulang menjadi jadwal, tetapi belum menjalankan callback hook-nya, sehingga WP-Cron tetap bertanggung jawab menanganinya. |
| Action Scheduler | KeunggulanDirancang untuk didistribusikan di dalam plugin dan tema tanpa memerlukan akses server; fitur ini memproses jutaan pembayaran untuk Subscriptions dan webhook untuk WooCommerce setiap bulan, serta mencatat setiap tindakan di antarmuka admin. | Perbedaan dengan QueuetyAction Scheduler menjalankan hook di waktu berikutnya, seperti do_action() tertunda. Queuety menambahkan alur kerja multi-langkah dengan status yang bertahan di antara langkah, waktu tunggu sinyal dan persetujuan, serta mesin status; Anda dapat memeriksanya melalui perintah WP-CLI seperti wp queuety workflow timeline. |
| Temporal | KeunggulanPlatform eksekusi tahan lama: Event History mencatat setiap langkah alur kerja, sehingga proses berlanjut dari peristiwa terakhir yang tercatat setelah crash atau gangguan, dan Temporal Cloud tersedia sebagai alternatif untuk menghosting layanan sendiri. | Perbedaan dengan QueuetyTemporal Service adalah server Go ditambah database yang berjalan bersama aplikasi Anda. Queuety menyimpan statusnya dalam tabel MySQL pada koneksi database WordPress dan menjalankan worker melalui WP-CLI. |
Tanya jawab
Jawaban singkat dari dokumentasi Queuety.
Tidak untuk pekerjaan sederhana di antrean default. Plugin menjalankan worker sekali jalan melalui WordPress cron setiap menit, selama WordPress cron berjalan, dan menangani satu pekerjaan per eksekusi. Jadwal berulang, antrean khusus, dan latensi lebih rendah memerlukan proses wp queuety work khusus.
Tidak. Plugin memerlukan mysqli atau pdo_mysql dan secara default memilih mysqli di WordPress. Tetapkan QUEUETY_DB_DRIVER ke auto, mysqli, atau pdo untuk menentukan driver.
Job diambil dengan SELECT ... FOR UPDATE SKIP LOCKED, yang didukung MySQL mulai versi 8.0 dan MariaDB mulai versi 10.6. CI proyek ini dijalankan terhadap MySQL 8.0.
Ya, inti berbasis database—job, worker, alur kerja, sinyal, mesin status, artefak, log, metrik, dan jadwal—dapat berjalan dengan Connection langsung. Kumpulan worker juga memerlukan konstanta DB_HOST, DB_NAME, DB_USER, dan DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), bootstrap plugin, dan perintah wp queuety tetap memerlukan WordPress.
Belum. Queuety::replace_wp_cron() mengubah peristiwa wp_schedule_event() berulang menjadi jadwal Queuety, tetapi callback hook-nya belum berjalan. Jadi, tetap gunakan WP-Cron untuk peristiwa yang harus berjalan. Peristiwa dari wp_schedule_single_event() tetap ditangani oleh WP-Cron.
wp queuety work --workers=N membuat kumpulan tetap dan memulai ulang proses anak yang crash; fitur ini memerlukan ekstensi pcntl dan posix. --min-workers dan --max-workers menjalankan kumpulan adaptif yang bertambah saat antrean menumpuk dan berkurang saat pekerjaan mereda.
Instal plugin, mulai worker, lalu ikuti panduan mulai dari job pertama hingga alur kerja persetujuan dan mesin status.