انتقل إلى المحتوى

Queuety

محرك مهام سير العمل WordPress.

الطرفية
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

أحدث إصدار v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

في التطبيق العملي

سير عمل معرّف في PHP وأمر العامل الذي يشغّله.

سير عمل للموافقة

ينفّذ سير العمل خطوة، وينتظر 24 ساعة، ثم يتوقف عند wait_for_approval() إلى أن ترسل عملية أخرى إشارة approval.

يُخزّن التأخير في قاعدة البيانات، لذا يستمر بعد إعادة تشغيل العمال وعمليات النشر، كما تُسجّل الإشارة المرسلة مبكرًا ويُتعامل معها عند وصول سير العمل إلى الانتظار. يؤدي إلغاء التشغيل إلى استدعاء المعالج on_cancel().

PHP
$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' ] );

حجز المهام مباشرةً من MySQL

يعمل كل عامل داخل عملية WP-CLI طويلة التشغيل، ويحجز المهام مباشرةً من MySQL باستخدام FOR UPDATE SKIP LOCKED.

مهام سير عمل دائمة

عمليات متعددة الخطوات ذات حالة مستمرة تصمد أمام انتهاء مهلة PHP والتعطل وإعادة المحاولة.

آلات الحالات

حالة طويلة الأمد تحركها الأحداث مع Queuety::machine(): عرّف الحالات والانتقالات، وأرسل الأحداث، واقرأ التسلسل الزمني.

الإشارات والموافقات

توقف wait_for_signal() وwait_for_approval() وwait_for_input() سير العمل مؤقتًا إلى أن يصل إدخال خارجي.

مستويات الأولوية

أربعة مستويات من منخفضة إلى عاجلة. داخل قائمة الانتظار، تُحجز المهام ذات الأولوية الأعلى أولًا.

تحديد معدل الطلبات

حدود لكل معالِج ضمن نافذة زمنية متحركة. إذا حجز عامل مهمة خاضعة لتحديد المعدل، فإنه يعيدها إلى قائمة الانتظار وينتظر.

المهام المتكررة

جدولة حسب الفواصل الزمنية وcron. محلل cron مدمج بلا تبعيات خارجية.

الخطوات المتوازية

شغّل خطوات سير العمل بالتزامن وانتظر اكتمالها جميعًا قبل المتابعة.

المقاييس والسجلات

سجل دائم في قاعدة البيانات يتضمن معدل الإنتاجية ومتوسط المدة ومدتها عند p95 ومعدل الأخطاء لكل معالج.

بديل WP-Cron

من دون الوصول إلى الصدفة، يشغّل حدث WordPress cron مرة واحدة كل دقيقة عاملًا لمرة واحدة في قائمة الانتظار الافتراضية.

البرمجيات الوسيطة

برمجيات وسيطة للمهام بأسلوب البصل، لضبط حدود المعدل وتقييد الاستثناءات والتفرّد والمهل الزمنية ومنع التداخل.

PHP 8.2+

التعدادات، والفئات للقراءة فقط، وتعبيرات match، وترقية مُنشئ الفئة، وسمات PHP.

لماذا Queuety؟

الحالة محفوظة في MySQL

تُخزّن صفوف قائمة الانتظار وحالة سير العمل والسجلات والإشارات والأجزاء المتدفقة في MySQL، لذا لا تؤدي إعادة تشغيل العامل إلى فقدان حالة التنسيق. عند نهاية كل خطوة، تُعتمد تحديثات الحالة واكتمال المهمة وإضافة المهمة التالية إلى قائمة الانتظار في معاملة واحدة.

خارج طلب الصفحة

لا يعمل WP-Cron إلا عند زيارة الصفحات، ويُنهى استدعاء LLM مدته 60 ثانية بسبب مهلة PHP البالغة 30 ثانية. تعمل عمال Queuety في عملية WP-CLI طويلة الأمد وتلتقط المهام دون انتظار حركة المرور.

ضوابط لعمليات تشغيل الوكلاء

تحافظ for_each() مع وضع النصاب القانوني وبوابات الموافقة والحدود مثل max_transitions() وmax_state_bytes() على بقاء عمليات تشغيل الوكلاء الطويلة ضمن نطاق محدد.

قابل للاستخدام خارج WordPress

تعمل النواة المدعومة بقاعدة البيانات في أي عملية PHP يمكنها فتح قاعدة البيانات نفسها، ما يتيح لتطبيق آخر إرسال المهام والإشارات وقراءة حالة سير العمل. تتطلب مشغلات الإجراءات وجسر WP-Cron وأوامر WP-CLI وجود WordPress.

مقارنة مع

كيف يرتبط Queuety ببرامج الجدولة ومحركات سير العمل التي يعرفها مطورو WordPress بالفعل.

Queuety مقارنةً بأدوات أخرى
WP-Cron مناسب لـمدمج في WordPress، فلا يحتاج إلى الوصول إلى مجدول النظام على الاستضافة المشتركة، وتُنفّذ المهمة التي يفوت موعدها عند تحميل الصفحة التالية بدلًا من إسقاطها. الاختلاف عن Queuetyتعمل Queuety بشكل مستقل عن حركة المرور على الموقع، وتحتاج إلى عملية wp queuety work طويلة التشغيل. يحوّل جسر WP-Cron الأحداث المتكررة إلى جداول زمنية، لكنه لا يشغّل استدعاءات الخطافات الخاصة بها بعد، لذا تظل WP-Cron مسؤولة عنها.
Action Scheduler مناسب لـمصمم للتوزيع ضمن الإضافات والقوالب من دون الحاجة إلى الوصول إلى الخادم؛ إذ يعالج ملايين المدفوعات لاشتراكات WooCommerce وخطافات الويب شهريًا، ويسجل كل إجراء في واجهة الإدارة. الاختلاف عن Queuetyيشغّل Action Scheduler خطافًا في وقت لاحق، مثل do_action() مؤجل. يضيف Queuety عمليات سير عمل متعددة الخطوات تستمر حالتها بين الخطوات، وانتظارات الإشارات والموافقات، وآلات الحالات؛ ويمكنك فحصها عبر أوامر WP-CLI مثل wp queuety workflow timeline.
Temporal مناسب لـمنصة تنفيذ متينة: يسجل سجل الأحداث كل خطوة من سير العمل، ليُستأنف التشغيل من آخر حدث مسجل بعد الأعطال أو الانقطاعات، كما يتوفر Temporal Cloud بديلًا لاستضافة الخدمة بنفسك. الاختلاف عن Queuetyخدمة Temporal هي خادم Go مع قاعدة بيانات يعمل بجوار تطبيقك. يحتفظ Queuety بحالته في جداول MySQL على اتصال قاعدة البيانات WordPress، ويشغّل العمال عبر WP-CLI.

الأسئلة والأجوبة

إجابات موجزة من توثيق Queuety.

ثبّت الإضافة، وابدأ عاملًا، واتبع الأدلة من أول مهمة لك إلى عمليات سير العمل للموافقة وآلات الحالات.