PHP API
يمكن الوصول إلى كل شيء في Queuety عبر الفئة الثابتة Queuety\Queuety. وهي نقطة الدخول الوحيدة لإرسال المهام، وبناء مسارات العمل، وتشغيل آلات الحالة، وإدارة قوائم الانتظار، والوصول إلى الأنظمة الفرعية الداخلية.
use Queuety\Queuety;
الوصول المستقل إلى النواة
يمكن تهيئة بيئة التشغيل المدعومة بقاعدة بيانات الخاصة بـ Queuety خارج WordPress.
هذا المسار المستقل مخصص لنواة التنسيق:
- المهام والعاملون (تحتاج مجموعات العاملين أيضًا إلى الثوابت
DB_HOSTوDB_NAMEوDB_USERوDB_PASSWORD، راجع أدناه) - تدفقات العمل والإشارات
- آلات الحالات والأحداث
- العناصر الأثرية والسجلات والمقاييس والجداول الزمنية
لا يُعد بديلًا عن المحوّل WordPress. لا يزال كل من Queuety::on_action() وreplace_wp_cron() وتهيئة الإضافة ومسار تسجيل wp queuety ... الفعلي يتطلب WordPress.
Queuety::init( Connection $conn )
هيّئ Queuety باتصال مباشر مدعوم بقاعدة بيانات.
use Queuety\Connection;
use Queuety\Queuety;
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
);
Queuety::init( $conn );
تغيّر الوسيطة الاختيارية table_prefix الجزء Queuety من أسماء جداول بيئة التشغيل لكل اتصال:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
يحوّل ذلك جداول مثل queuety_jobs إلى wp_themequeue_jobs.
Queuety::ensure_schema()
تأكد من وجود جداول بيئة التشغيل Queuety للاتصال النشط.
Queuety::init( $conn );
Queuety::ensure_schema();
للاطلاع على النموذج الكامل وحدود WordPress، راجع الاستخدام المستقل.
المهام
Queuety::dispatch( $handler, $payload )
أرسل مهمة. يقبل اسم معالج كسلسلة نصية أو مثيلًا من Contracts\Job. ويُرجع منشئًا PendingJob لتسلسل الخيارات.
// Handler name + payload (original API)
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );
// Contracts\Job instance (v0.6.0+)
Queuety::dispatch( new SendEmailJob( to: 'user@example.com' ) );
// With options
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] )
->on_queue( 'emails' )
->with_priority( Priority::High )
->delay( 300 )
->max_attempts( 5 )
->rate_limit( 10, 60 )
->unique()
->after( $other_job_id );
// Get the job ID
$job_id = Queuety::dispatch( 'send_email', $payload )->id();
عند تمرير مثيل من Contracts\Job، يستخرج المُسلسِل FQCN بوصفه اسم المعالج والخصائص العامة بوصفها الحمولة. ويتم تجاهل المعامل $payload عندما تكون $handler مثيلًا من Job.
طرق PendingJob
| الطريقة | الوصف |
|---|---|
on_queue( string $queue ) |
تعيين قائمة الانتظار المستهدفة |
with_priority( Priority $priority ) |
تعيين مستوى الأولوية |
delay( int $seconds ) |
التأخير قبل إتاحة المهمة |
max_attempts( int $max ) |
الحد الأقصى لمحاولات إعادة المحاولة |
rate_limit( int $max, int $window ) |
تحديد المعدل: الحد الأقصى للتنفيذات خلال نافذة زمنية بالثواني |
unique() |
منع الإرسال المكرر |
after( int $job_id ) |
انتظار اكتمال مهمة أخرى أولًا |
concurrency_group( string $group, int $limit ) |
وضع المهمة ضمن مجموعة مشتركة لقبول العاملين |
cost_units( int $units ) |
إرفاق بيانات وصفية للتكلفة النسبية للتنفيذ بعملية الإرسال |
id() |
فرض الإرسال وإرجاع معرّف المهمة |
يدعم كل من concurrency_group() وcost_units() نموذج إدارة الموارد الأوسع، ما يتيح لعملية الإرسال نفسها المشاركة في حدود التزامن القائمة على العدد، وميزانيات قوائم الانتظار أو مزوّدي الخدمة الموزونة، وأساليب الاستدلال لقبول العاملين.
Queuety::dispatch_sync( $handler, $payload )
نفّذ مهمة بشكل متزامن في العملية الحالية دون إضافتها إلى قائمة الانتظار.
// With a Job instance
Queuety::dispatch_sync( new SendEmailJob( to: 'user@example.com', subject: 'Hi', body: 'Hello' ) );
// With a handler name and payload
Queuety::dispatch_sync( 'send_email', [ 'to' => 'user@example.com' ] );
يُستدعى أسلوب handle() الخاص بالمهمة مباشرة. لا يُنشأ أي سجل في قاعدة البيانات، ولا يُستخدم أي عامل، ولا تُطبّق البرمجيات الوسيطة.
Queuety::batch( $jobs )
أرسل عدة مهام في تعليمة INSERT واحدة متعددة الصفوف.
$job_ids = Queuety::batch( [
[ 'handler' => 'send_email', 'payload' => [ 'to' => 'a@example.com' ], 'queue' => 'emails' ],
[ 'handler' => 'send_email', 'payload' => [ 'to' => 'b@example.com' ], 'priority' => 2 ],
] );
Queuety::create_batch( $jobs )
أنشئ BatchBuilder لإرسال مجموعة من المهام مع عمليات الاستدعاء وتتبع التقدم. راجع التجميع للاطلاع على التفاصيل الكاملة.
$batch = Queuety::create_batch( [
new ImportUsersJob( $chunk_1 ),
new ImportUsersJob( $chunk_2 ),
] )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->allow_failures()
->on_queue( 'imports' )
->dispatch();
طرق BatchBuilder
| الطريقة | القيمة المُعادة | الوصف |
|---|---|---|
name( string $name ) |
self |
تعيين اسم للمجموعة |
on_queue( string $queue ) |
self |
تعيين قائمة الانتظار لجميع مهام المجموعة |
then( string $handler_class ) |
self |
معالج يُستدعى عند اكتمال المجموعة بنجاح |
catch( string $handler_class ) |
self |
معالج يُستدعى عند فشل أول مهمة في المجموعة |
finally( string $handler_class ) |
self |
معالج يُستدعى عند انتهاء المجموعة، سواء بالنجاح أو الفشل |
allow_failures() |
self |
السماح باستدعاء then حتى عند وجود إخفاقات |
dispatch() |
Batch |
إنشاء سجل المجموعة وجميع المهام، وإرجاع كائن القيمة Batch |
Queuety::find_batch( $id )
اعثر على مجموعة حسب المعرّف. يُرجع كائن قيمة Batch أو null.
$batch = Queuety::find_batch( $batch_id );
if ( null !== $batch ) {
echo $batch->progress() . '% complete';
}
التحكم بالعاملين
Queuety::run_worker( $queue = 'default', $once = false )
شغّل حلقة عامل واحدة مباشرة.
Queuety::run_worker( 'default' );
Queuety::run_worker( 'critical,default', true );
Queuety::run_worker_pool( $workers, $queue = 'default' )
شغّل مجموعة عاملين مباشرة بحجم ثابت. يتطلب امتدادي pcntl وposix. تقرأ المجموعة ثوابت WordPress وDB_HOST وDB_NAME وDB_USER وDB_PASSWORD لاتصالاتها الفرعية (ولا تأتي من الاتصال المُهيّأ سوى بادئات الجداول)، لذا عرّفها عند تشغيل مجموعة خارج WordPress (#5).
Queuety::run_worker_pool( 4, 'providers' );
Queuety::run_auto_scaling_worker_pool( $min_workers, $max_workers, $queue = 'default' )
شغّل مجموعة عاملين تكيفية مباشرة. تنطبق المتطلبات نفسها على run_worker_pool().
Queuety::run_auto_scaling_worker_pool( 2, 6, 'providers' );
كائن القيمة Batch
| الطريقة/الخاصية | النوع | الوصف |
|---|---|---|
$id |
int |
معرّف المجموعة |
$name |
string|null |
اسم المجموعة، اختياري |
$total_jobs |
int |
إجمالي عدد المهام في المجموعة |
$pending_jobs |
int |
المهام التي لا تزال قيد الانتظار |
$failed_jobs |
int |
عدد المهام الفاشلة |
$failed_job_ids |
array |
معرّفات المهام الفاشلة |
$created_at |
DateTimeImmutable |
وقت إنشاء المجموعة |
$finished_at |
DateTimeImmutable|null |
وقت انتهاء المجموعة |
$cancelled_at |
DateTimeImmutable|null |
وقت إلغاء المجموعة |
progress() |
int |
نسبة الاكتمال (0-100) |
finished() |
bool |
ما إذا كانت المجموعة قد انتهت |
has_failures() |
bool |
ما إذا كانت أي مهمة قد فشلت |
cancelled() |
bool |
ما إذا كانت المجموعة قد أُلغيت |
Queuety::chain( $jobs )
أنشئ ChainBuilder لتنفيذ المهام بالتتابع. تعتمد كل مهمة على اكتمال المهمة السابقة بنجاح.
$first_job_id = Queuety::chain( [
new FetchDataJob( $url ),
new ProcessDataJob(),
new NotifyCompleteJob(),
] )
->on_queue( 'pipeline' )
->catch( ChainFailedHandler::class )
->dispatch();
طرق ChainBuilder
| الطريقة | القيمة المُعادة | الوصف |
|---|---|---|
on_queue( string $queue ) |
self |
تعيين قائمة الانتظار لجميع مهام السلسلة |
catch( string $handler_class ) |
self |
معالج يُستدعى عند دفن أي مهمة في السلسلة نهائيًا |
dispatch() |
int |
إنشاء جميع المهام مع تبعيات متسلسلة، وإرجاع معرّف المهمة الأولى |
Queuety::retry( $job_id )
أعِد محاولة مهمة محددة. وتُعاد حالتها إلى pending.
Queuety::retry( 42 );
Queuety::retry_buried()
أعِد محاولة جميع المهام المدفونة. يُرجع عدد المهام التي أُعيدت محاولتها.
$count = Queuety::retry_buried();
Queuety::purge( $older_than_days )
احذف المهام المكتملة. يُرجع عدد المهام المحذوفة.
$count = Queuety::purge(); // uses QUEUETY_RETENTION_DAYS
$count = Queuety::purge( 30 ); // purge jobs older than 30 days
قوائم الانتظار
Queuety::stats( $queue )
احصل على أعداد المهام مجمّعة حسب الحالة.
$stats = Queuety::stats(); // all queues
$stats = Queuety::stats( 'emails' ); // specific queue
// ['pending' => 12, 'processing' => 3, 'completed' => 150, 'failed' => 2, 'buried' => 1]
Queuety::buried( $queue )
احصل على جميع المهام المدفونة.
$jobs = Queuety::buried();
$jobs = Queuety::buried( 'emails' );
Queuety::pause( $queue )
أوقف قائمة انتظار مؤقتًا كي يتجاوزها العاملون.
Queuety::pause( 'emails' );
Queuety::resume( $queue )
استأنف قائمة انتظار متوقفة مؤقتًا.
Queuety::resume( 'emails' );
Queuety::is_paused( $queue )
تحقق مما إذا كانت قائمة الانتظار متوقفة مؤقتًا.
if ( Queuety::is_paused( 'emails' ) ) {
// Queue is paused
}
تدفقات العمل
Queuety::workflow( $name )
ابدأ إنشاء تدفق عمل. يُرجع WorkflowBuilder.
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
طرق WorkflowBuilder
| الطريقة | الوصف |
|---|---|
then( string $handler_class, ?string $name = null ) |
إضافة خطوة متسلسلة. اسم اختياري للتفرع الشرطي. |
parallel( array $handler_classes ) |
إضافة مجموعة خطوات متوازية. |
for_each( string $items_key, string $handler_class, ?string $result_key = null, ForEachMode $mode = ForEachMode::All, ?int $quorum = null, ?string $reducer_class = null, ?string $name = null ) |
إضافة خطوة ديناميكية للتكرار على العناصر، تنشئ مهمة فرعية لكل عنصر في حالة تدفق العمل. |
repeat_while( string $target_step, ?string $state_key = null, mixed $expected = true, ?string $name = null, ?string $condition_class = null, ?int $max_iterations = null ) |
الرجوع إلى خطوة مسماة سابقة ما دام مفتاح حالة عام أو صنف RepeatCondition مطابقًا. |
repeat_until( string $target_step, ?string $state_key = null, mixed $expected = true, ?string $name = null, ?string $condition_class = null, ?int $max_iterations = null ) |
الرجوع إلى خطوة مسماة سابقة إلى أن يطابق مفتاح حالة عام أو صنف RepeatCondition. |
run_workflow( string $workflow_name, WorkflowBuilder $sub_builder ) |
إضافة خطوة لتشغيل تدفق عمل. |
delay( int $seconds = 0, int $minutes = 0, int $hours = 0, int $days = 0 ) |
إضافة خطوة تأخير دائم. تُجمع مدد التأخير كلها. |
wait_for_signal( string $name, ?string $result_key = null, ?string $step_name = null, array $match_payload = [], ?string $correlation_key = null ) |
إضافة خطوة انتظار إشارة. يتيح لك كل من match_payload وcorrelation_key اختياريًا تجاهل الأحداث غير المرتبطة. |
wait_for_signals( array $signal_names, WaitMode $mode = WaitMode::All, ?string $result_key = null, ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
انتظار كل الإشارات أو بعضها، مع مطابقة اختيارية للحمولة وربطها. |
wait_for_approval( string $signal_name = 'approval', ?string $result_key = 'approval', ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
انتظار إشارة موافقة بشرية. |
wait_for_decision( string $approve_signal = 'approved', string $reject_signal = 'rejected', ?string $result_key = 'decision', ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
انتظار الموافقة أو الرفض، وتخزين حمولة قرار منظّمة. |
wait_for_input( string $signal_name = 'input', ?string $result_key = 'input', ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
انتظار إشارة إدخال بشري. |
wait_for_workflow( int|string $workflow, ?string $result_key = null, ?string $name = null ) |
انتظار اكتمال معرّف تدفق عمل واحد أو معرّف مخزّن في الحالة العامة. |
wait_for_workflows( array|string $workflows, WaitMode $mode = WaitMode::All, ?string $result_key = null, ?string $name = null, ?int $quorum = null ) |
انتظار اكتمال جميع تدفقات العمل أو بعضها أو النصاب المطلوب منها. |
wait_for_workflow_group( string $group_key, WaitMode $mode = WaitMode::All, ?int $quorum = null, ?string $result_key = null, ?string $name = null ) |
انتظار مجموعة تدفقات عمل بدأت سابقًا باستخدام مفتاح المجموعة الداخلي. |
start_workflows( string $items_key, WorkflowBuilder $workflow_builder, string $result_key = 'started_workflow_ids', string $payload_key = 'item', bool $inherit_state = true, ?string $name = null, ?string $group_key = null ) |
إرسال تدفق عمل رئيسي واحد لكل عنصر في بيئة التشغيل، مع خيار وسم المجموعة التي بدأ تشغيلها بمفتاح مجموعة دائم. |
start_agents( string $items_key, WorkflowBuilder $workflow_builder, string $result_key = 'agent_workflow_ids', string $payload_key = 'agent_task', bool $inherit_state = true, ?string $name = null, ?string $group_key = null ) |
اسم بديل موجّه للوكلاء لـ start_workflows(). |
wait_for_agents( array|string $workflows = 'agent_workflow_ids', WaitMode $mode = WaitMode::All, ?string $result_key = 'agent_results', ?string $name = null, ?int $quorum = null ) |
اسم بديل موجّه للوكلاء لـ wait_for_workflows(). |
wait_for_agent_group( string $group_key = 'agents', WaitMode $mode = WaitMode::All, ?int $quorum = null, ?string $result_key = 'agent_results', ?string $name = null ) |
اسم بديل موجّه للوكلاء لـ wait_for_workflow_group(). |
version( string $version ) |
وسم تعريف تدفق العمل بإصدار على مستوى التطبيق لتسهيل الفحص والتصدير. |
idempotency_key( string $key ) |
جعل إرسال تدفق العمل دائمًا باستخدام مفتاح يقدمه المستدعي. يؤدي الإرسال مجددًا بالمفتاح نفسه إلى إرجاع معرّف تدفق العمل الأصلي. |
max_transitions( int $max ) |
إخفاق تدفق العمل إذا اكتمل أكثر من $max انتقالات للخطوات. |
max_for_each_items( int $max ) |
إخفاق تدفق العمل إذا حاولت خطوة for_each() توسيع أكثر من $max عنصرًا. |
max_state_bytes( int $bytes ) |
إخفاق تدفق العمل إذا تجاوز حجم الحالة العامة $bytes. |
max_cost_units( int $max ) |
إخفاق تدفق العمل إذا استهلكت الخطوات المكتملة أكثر من $max وحدة تكلفة. |
max_started_workflows( int $max ) |
إخفاق تدفق العمل قبل إرسال أكثر من $max من تدفقات العمل الفرعية. |
compensate_with( string $handler_class ) |
إرفاق معالج تعويض بآخر خطوة أُضيفت. |
compensate_on_failure() |
تشغيل عمليات تعويض الخطوات المكتملة تلقائيًا عند إخفاق تدفق العمل. |
on_queue( string $queue ) |
تعيين قائمة الانتظار لجميع الخطوات. |
with_priority( Priority $priority ) |
تعيين الأولوية لجميع الخطوات. |
max_attempts( int $max ) |
تعيين الحد الأقصى لمحاولات إعادة المحاولة لكل خطوة. |
on_cancel( string $handler_class ) |
تسجيل صنف معالج للتنظيف عند الإلغاء. راجع الإلغاء. |
prune_state_after( int $steps = 2 ) |
تفعيل تشذيب الحالة تلقائيًا. يزيل مخرجات الخطوات الأقدم من الحد الزمني. راجع تشذيب الحالة. |
must_complete_within( int $seconds = 0, int $minutes = 0, int $hours = 0, int $days = 0 ) |
تعيين موعد نهائي لتدفق العمل. تُجمع مدد التأخير كلها. راجع المواعيد النهائية. |
on_deadline( string $handler_class ) |
تسجيل معالج يُستدعى عند تجاوز الموعد النهائي لتدفق العمل. راجع المواعيد النهائية. |
dispatch( array $initial_payload = [] ) |
إرسال تدفق العمل. يُرجع معرّفه. |
Queuety::workflow_status( $workflow_id )
احصل على حالة تدفق العمل. يُرجع كائنًا WorkflowState أو null.
$state = Queuety::workflow_status( $workflow_id );
echo $state->name; // 'generate_report'
echo $state->status->value; // 'running'
echo $state->current_step; // 1
echo $state->total_steps; // 3
print_r( $state->state ); // accumulated public state array
echo $state->wait_type; // 'signal' or 'workflow' while blocked
echo $state->wait_mode; // 'all', 'any', or 'quorum'
echo $state->definition_version; // 'research.v2'
echo $state->definition_hash; // '4c7a...'
echo $state->idempotency_key; // 'brief:42:research'
echo $state->artifact_count; // 2
print_r( $state->budget ); // configured workflow budget + current usage
print_r( $state->wait_details ); // matched/remaining blockers, result key, correlation info
print_r( $state->artifact_keys ); // ['draft', 'citations']
يكشف WorkflowState أيضًا عن:
waiting_for: أسماء الإشارات أو معرّفات تدفقات العمل التي تعيق التشغيل حاليًاcurrent_step_name: الاسم المُعدّ للخطوة الحالية، إن وُجدwait_mode: وضع الانتظار الحالي (allأوanyأوquorum) أثناء التعليقwait_details: بيانات فحص إضافية، مثل العوائق المطابقة والمتبقيةdefinition_version: القيمة التي عيّنهاversion()، إن وُجدتdefinition_hash: تجزئة حتمية لتعريف تدفق العملidempotency_key: مفتاح الإرسال الدائم، إن وُجدbudget: الحدود المُعدّة والاستخدام الحالي، إذا كانت ضوابط الحماية مفعّلةartifact_count: عدد العناصر الأثرية المخزّنة لتدفق العملartifact_keys: مفاتيح العناصر الأثرية المخزّنة لسرعة الفحص
Queuety::retry_workflow( $workflow_id )
أعِد محاولة تدفق عمل فاشل بدءًا من الخطوة التي أخفقت.
Queuety::retry_workflow( $workflow_id );
يرمي RuntimeException إذا كان قد تم تعويض تدفق العمل بالفعل بعد إخفاق.
Queuety::pause_workflow( $workflow_id )
أوقف تدفق عمل قيد التشغيل مؤقتًا. قد يكتمل العمل المُدرج مسبقًا للخطوة الحالية، لكن لن تُدرج خطوات لاحقة حتى تستأنف تدفق العمل.
Queuety::pause_workflow( $workflow_id );
Queuety::resume_workflow( $workflow_id )
استأنف تدفق عمل متوقفًا مؤقتًا.
Queuety::resume_workflow( $workflow_id );
Queuety::cancel_workflow( $workflow_id )
ألغِ تدفق عمل وشغّل أي معالجات تنظيف مسجلة. يعيّن الحالة إلى cancelled ويدفن جميع المهام المعلّقة وقيد المعالجة الخاصة بتدفق العمل.
Queuety::cancel_workflow( $workflow_id );
يرمي RuntimeException إذا كان تدفق العمل بالفعل completed أو cancelled. راجع الإلغاء للاطلاع على التفاصيل.
Queuety::rewind_workflow( $workflow_id, $to_step )
أعِد تدفق العمل إلى خطوة سابقة وأعِد تشغيله من هناك. تُستعاد الحالة من سجل الأحداث state_after للخطوة المحددة، وتُدرج الخطوة التالية في قائمة الانتظار.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );
يرمي RuntimeException إذا لم توجد حالة مسجلة للخطوة المستهدفة. يتطلب سجل أحداث تدفق العمل. راجع السفر عبر الزمن للاطلاع على التفاصيل.
Queuety::fork_workflow( $workflow_id )
أنشئ نسخة مستقلة من تدفق عمل قيد التشغيل عند حالته الحالية. يُرجع معرّف تدفق العمل الجديد.
$forked_id = Queuety::fork_workflow( $workflow_id );
يحصل تدفق العمل المتفرّع على معرّف خاص به ويعمل بشكل مستقل عن التدفق الأصلي. راجع التفرّع للاطلاع على التفاصيل.
Queuety::export_workflow( $workflow_id )
صدّر سجل التنفيذ الكامل لتدفق العمل كمصفوفة قابلة للتسلسل بصيغة JSON. تتضمن سجل تدفق العمل وجميع المهام وأحداث تدفق العمل ومدخلات السجل.
$data = Queuety::export_workflow( $workflow_id );
راجع التصدير وإعادة التشغيل للاطلاع على بنية JSON وحالات الاستخدام.
Queuety::replay_workflow( $data )
أعِد تشغيل تدفق عمل مُصدّر في البيئة الحالية. ينشئ تدفق عمل جديدًا من بيانات التصدير ويُرجع معرّفه.
$new_id = Queuety::replay_workflow( $data );
راجع التصدير وإعادة التشغيل للاطلاع على التفاصيل.
Queuety::replace_wp_cron()
استبدل نظام WordPress cron المدمج بجدول المواعيد الخاص بـ Queuety. يعترض wp_schedule_event() وwp_unschedule_event() وwp_get_scheduled_event()، ويوجّه الأحداث المتكررة عبر العامل Queuety.
Queuety::replace_wp_cron();
لا يعمل إلا عند تحميل WordPress. راجع استبدال WP-Cron للاطلاع على التفاصيل.
Queuety::restore_wp_cron()
استعد السلوك الافتراضي لـ WordPress cron بإزالة خطّافات الجسر Queuety cron.
Queuety::restore_wp_cron();
راجع استبدال WP-Cron لمعرفة القيود.
Queuety::signal( $workflow_id, $name, $data )
أرسل إشارة إلى تدفق عمل. إذا كان تدفق العمل ينتظر هذه الإشارة حاليًا، فسيُستأنف فورًا. وإلا، تُخزّن الإشارة وتُلتقط عندما يصل تدفق العمل إلى خطوة wait_for_signal المقابلة.
Queuety::signal( $workflow_id, 'approved' );
// With data merged into workflow state
Queuety::signal( $workflow_id, 'approved', [
'approved_by' => 'admin@example.com',
] );
راجع إشارات تدفق العمل للاطلاع على التفاصيل.
Queuety::approve_workflow( $workflow_id, $data = [], $signal_name = 'approval' )
غلاف دلالي حول signal() لتدفقات الموافقة.
Queuety::approve_workflow( $workflow_id, [
'reviewer' => 'editor@example.com',
] );
Queuety::reject_workflow( $workflow_id, $data = [], $signal_name = 'rejected' )
غلاف دلالي حول signal() لتدفقات الرفض.
Queuety::reject_workflow( $workflow_id, [
'reason' => 'needs citations',
] );
Queuety::submit_workflow_input( $workflow_id, $data = [], $signal_name = 'input' )
غلاف دلالي حول signal() للإدخال البشري المنظّم.
Queuety::submit_workflow_input( $workflow_id, [
'notes' => 'Ship after legal review',
] );
Queuety::put_artifact( $workflow_id, $artifact_key, $content, $kind = 'json', $step_index = null, $metadata = [] )
خزّن عنصرًا أثريًا دائمًا واحدًا لتدفق عمل.
Queuety::put_artifact(
$workflow_id,
'research_brief',
[ 'summary' => 'done' ],
'json',
metadata: [ 'source' => 'agent' ],
);
Queuety::put_current_artifact( $artifact_key, $content, $kind = 'json', $metadata = [] )
خزّن عنصرًا أثريًا واحدًا لخطوة تدفق العمل الجاري تنفيذها.
Queuety::put_current_artifact(
'draft',
[ 'status' => 'ready' ],
'json',
);
Queuety::workflow_artifact( $workflow_id, $artifact_key )
اجلب عنصرًا أثريًا مخزّنًا واحدًا لتدفق عمل.
$artifact = Queuety::workflow_artifact( $workflow_id, 'draft' );
Queuety::workflow_artifacts( $workflow_id, $include_content = false )
اعرض قائمة العناصر الأثرية لتدفق عمل.
$artifacts = Queuety::workflow_artifacts( $workflow_id );
Queuety::delete_workflow_artifact( $workflow_id, $artifact_key )
احذف عنصرًا أثريًا واحدًا لتدفق عمل.
Queuety::delete_workflow_artifact( $workflow_id, 'draft' );
آلات الحالات
Queuety::machine( $name )
ابدأ إنشاء آلة حالات. يُرجع StateMachineBuilder.
use Queuety\Enums\StateMachineStatus;
$machine_id = Queuety::machine( 'agent_session' )
->state( 'awaiting_user' )
->on( 'user_message', 'planning' )
->state( 'planning' )
->action( PlanSessionAction::class )
->on( 'planned', 'completed' )
->state( 'completed', StateMachineStatus::Completed )
->dispatch( [ 'thread_id' => 42 ] );
طرق StateMachineBuilder
| الطريقة | الوصف |
|---|---|
initial( string $state_name ) |
تعيين الحالة الأولية صراحةً. |
state( string $state_name, ?StateMachineStatus $terminal_status = null ) |
بدء إعداد حالة واحدة. |
action( string|array $action_class ) |
تسجيل إجراء دخول إلى الحالة الحالية في قائمة الانتظار. مرّر اسم صنف أو تعريفًا منظّمًا يتضمن class وpayload وconfig؛ وتصل payload إلى StateAction::handle() بصفتها $payload. |
on( string $event, string $target, string|array|null $guard_class = null, ?string $name = null ) |
تسجيل انتقال واحد لحدث من الحالة الحالية. يقبل شرط الحراسة الصيغة المنظّمة نفسها التي يقبلها action(). |
on_queue( string $queue ) |
تعيين قائمة الانتظار المستخدمة لإجراءات الحالة المؤجلة. |
with_priority( Priority $priority ) |
تعيين أولوية إجراءات الحالة المؤجلة. |
max_attempts( int $max_attempts ) |
تعيين حد إعادة المحاولة لإجراءات الحالة المؤجلة. |
version( string $version ) |
إرفاق إصدار على مستوى التطبيق بتعريف الآلة. |
idempotency_key( string $key ) |
جعل الإرسال دائمًا لمفتاح يقدمه المستدعي. يؤدي الإرسال مجددًا بالمفتاح نفسه إلى إرجاع معرّف الآلة الأصلي. |
dispatch( array $initial_state = [] ) |
إرسال الآلة وإرجاع معرّفها. |
يمكن لأصناف إجراءات دخول الحالة أيضًا توفير طريقة اختيارية config() بمفاتيح سياسة الموارد نفسها التي تدعمها خطوات سير العمل: concurrency_group وconcurrency_limit وcost_units.
Queuety::dispatch_state_machine_definition( $definition, $initial_state = [], $options = [] )
إرسال حزمة تعريف آلة حالات متسلسلة. ينبغي لمعظم تعليمات التطبيق البرمجية استخدام machine()->dispatch(). أُنشئت هذه الطريقة منخفضة المستوى كي تتمكن المحوّلات من بدء آلة دون الاعتماد مباشرةً على أداة الإنشاء.
$machine_id = Queuety::dispatch_state_machine_definition(
$definition,
[ 'thread_id' => 42 ],
[ 'idempotency_key' => 'thread:42' ],
);
Queuety::machine_status( $machine_id )
الحصول على حالة الآلة الحالية. تُرجع كائن StateMachineState أو null.
$status = Queuety::machine_status( $machine_id );
echo $status->name; // 'agent_session'
echo $status->status->value; // 'waiting_event'
echo $status->current_state; // 'awaiting_review'
print_r( $status->state ); // public machine state
print_r( $status->available_events ); // valid incoming events in the current state
توفّر StateMachineState أيضًا:
definition_versiondefinition_hashidempotency_keyerror_messagecurrent_actionterminal_status
Queuety::machine_event( $machine_id, $event_name, $payload = [] )
إرسال حدث خارجي واحد إلى آلة في حالة انتظار.
Queuety::machine_event(
$machine_id,
'approve',
[
'approved' => true,
'reviewer' => 'editor@example.com',
]
);
تكون الحمولة متاحة لشروط الانتقال، وتُدمج في حالة الآلة العامة عند قبول الحدث.
Queuety::list_machines( $limit = 50, $status = null )
عرض صفوف الآلات المحفوظة لفحصها.
$machines = Queuety::list_machines();
$waiting = Queuety::list_machines( status: 'waiting_event' );
يتضمن كل صف معرّف الآلة واسمها وحالتها والحالة الراهنة وإصدار التعريف وبصمة التعريف ومفتاح منع التكرار والطوابع الزمنية لدورة الحياة.
Queuety::machine_timeline( $machine_id, $limit = 100, $offset = 0 )
الحصول على سجل الأحداث الدائم لآلة واحدة.
$timeline = Queuety::machine_timeline( $machine_id );
$page_two = Queuety::machine_timeline( $machine_id, 100, 100 );
يحتوي كل صف حدث على: id وmachine_id وjob_id وstate_name وhandler وevent وevent_name وtransition_name وqueue وattempt وinput وoutput وstate_before وstate_after وcontext وartifacts وchunks وerror وduration_ms وcreated_at.
Queuety::machine_trace( $machine_id )
الحصول على حزمة تتبّع موحّدة لمصحّح آلة الحالات UI.
$trace = Queuety::machine_trace( $machine_id );
يحتوي التتبّع على machine وstates مجمّعة وevents خام وjobs للإجراء المرتبط وlogs وartifacts وchunks.
Queuety::machine_state_at( $machine_id, $event_id )
الحصول على الحالة العامة بعد حدث تتبّع محدد للآلة، أو null إذا لم يُعثر عليه.
$state = Queuety::machine_state_at( $machine_id, $event_id );
راجع آلات الحالات للاطلاع على نموذج دورة الحياة وأنماط الاستخدام.
قوالب سير العمل
Queuety::define_workflow( $name )
إنشاء أداة إنشاء سير عمل لاستخدامها قالبًا.
$builder = Queuety::define_workflow( 'onboarding' )
->then( CreateAccountHandler::class )
->then( SendWelcomeEmailHandler::class );
Queuety::register_workflow_template( $builder )
تسجيل قالب سير عمل.
Queuety::register_workflow_template( $builder );
Queuety::run_workflow( $name, $payload, $options = [] )
إرسال قالب سير عمل مسجّل باسمه. يُرجع معرّف سير العمل.
$workflow_id = Queuety::run_workflow( 'onboarding', [ 'email' => 'user@example.com' ] );
$workflow_id = Queuety::run_workflow(
'onboarding',
[ 'email' => 'user@example.com' ],
[ 'idempotency_key' => 'onboarding:user@example.com' ],
);
يُطلق RuntimeException إذا لم يكن القالب مسجّلًا.
Queuety::dispatch_workflow_definition( $definition, $payload, $options = [] )
إرسال سير عمل انطلاقًا من حزمة تعريف وقت التشغيل.
ينبغي لمعظم تعليمات التطبيق البرمجية استخدام run_workflow() أو workflow()->dispatch(). أُنشئت هذه الطريقة منخفضة المستوى كي تتمكن المحوّلات القابلة لإعادة الاستخدام من إرسال تعريف سير عمل متسلسل دون الاعتماد على الطرق الداخلية لمدير سير العمل.
$workflow_id = Queuety::dispatch_workflow_definition(
$definition,
[ 'email' => 'user@example.com' ],
[ 'idempotency_key' => 'onboarding:user@example.com' ],
);
Queuety::on_action( $hook, $workflow, $map = null, $when = null, $idempotency_key = null, $priority = 10, $accepted_args = null )
تسجيل إجراء WordPress يرسل سير عمل.
Queuety::on_action(
'save_post',
workflow: 'content_review',
map: static fn ( int $post_id, object $post, bool $update ): array => [
'post_id' => $post_id,
'post_type' => $post->post_type,
'update' => $update,
],
when: static fn ( int $post_id, object $post ): bool => 'post' === $post->post_type,
idempotency_key: static fn ( int $post_id ): string => "save_post:{$post_id}",
);
يمكن أن يكون $workflow أحد ما يلي:
- اسم قالب سير عمل مسجّل
WorkflowBuilderمضمن
يعمل map وwhen وidempotency_key بشكل متزامن ضمن طلب WordPress الحالي. وحدها خطوات سير العمل نفسها تعمل بشكل غير متزامن بعد الإرسال.
راجع مشغّلات الإجراءات للاطلاع على الدليل الكامل.
Queuety::workflow_templates()
الحصول على سجل قوالب سير العمل.
$registry = Queuety::workflow_templates();
$template = $registry->get( 'onboarding' ); // WorkflowTemplate or null
Queuety::load_workflows( $directory, $recursive )
تحميل جميع ملفات سير العمل من دليل وتسجيلها. ينبغي لكل ملف .php إرجاع WorkflowBuilder. تُرجع الطريقة عدد مسارات العمل المسجّلة.
$count = Queuety::load_workflows( __DIR__ . '/workflows/' );
$count = Queuety::load_workflows( __DIR__ . '/workflows/', recursive: true );
Queuety::load_workflow_file( $file_path )
تحميل ملف سير عمل واحد وتسجيله. تُرجع WorkflowTemplate أو null إذا لم يُرجع الملف أداة إنشاء.
$template = Queuety::load_workflow_file( __DIR__ . '/workflows/onboard-user.php' );
الجدولة
Queuety::schedule( $handler, $payload )
إنشاء جدول متكرر. تُرجع أداة إنشاء PendingSchedule.
Queuety::schedule( 'cleanup_handler' )
->every( '1 hour' )
->on_queue( 'maintenance' );
Queuety::schedule( 'nightly_report' )
->cron( '0 3 * * *' )
->on_queue( 'reports' );
طرق PendingSchedule
| الطريقة | الوصف |
|---|---|
every( string $interval ) |
تعيين تعبير فترة زمنية (e.g، 1 hour، 30 minutes) |
cron( string $expression ) |
تعيين تعبير cron من 5 حقول |
overlap( OverlapPolicy $policy ) |
تعيين سياسة التداخل (الافتراضي: Allow). راجع الجدولة. |
on_queue( string $queue ) |
تعيين قائمة الانتظار المستهدفة (الافتراضي: default) |
id() |
فرض الإرسال وإرجاع معرّف الجدول |
Queuety::scheduler()
الحصول على مثيل Scheduler الداخلي.
$scheduler = Queuety::scheduler();
$schedules = $scheduler->list();
$scheduler->remove( 'handler_name' );
$count = $scheduler->tick(); // manually trigger
تسجيل المعالجات
Queuety::register( $name, $class )
تسجيل صنف معالج باسم.
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::discover_handlers( $directory, $namespace )
اكتشاف أصناف المعالجات في دليل وتسجيلها تلقائيًا. تُرجع الطريقة عدد المعالجات المسجّلة.
$count = Queuety::discover_handlers( __DIR__ . '/handlers', 'MyPlugin\\Handlers' );
Queuety::registry()
الحصول على سجل المعالجات.
$registry = Queuety::registry();
قابلية المراقبة
Queuety::logger()
الحصول على مثيل Logger للاستعلام عن إدخالات السجل.
$logger = Queuety::logger();
$logs = $logger->for_job( 42 );
$logs = $logger->for_workflow( 7 );
$logs = $logger->for_handler( 'send_email', 50 );
$logs = $logger->for_event( LogEvent::Failed, 50 );
$logs = $logger->since( new \DateTimeImmutable( '-1 hour' ), 100 );
$count = $logger->purge( 30 );
Queuety::metrics()
الحصول على مثيل Metrics.
$stats = Queuety::metrics()->handler_stats( 60 ); // last 60 minutes
Queuety::webhook_notifier()
الحصول على مثيل WebhookNotifier.
$notifier = Queuety::webhook_notifier();
$id = $notifier->register( 'job.buried', 'https://hooks.slack.com/...' );
$webhooks = $notifier->list();
$notifier->remove( $id );
Queuety::rate_limiter()
الحصول على مثيل RateLimiter.
$limiter = Queuety::rate_limiter();
$limiter->register( 'call_openai', 60, 60 );
التخزين المؤقت
Queuety::cache()
الحصول على مثيل خلفية التخزين المؤقت النشطة.
$cache = Queuety::cache();
$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );
Queuety::set_cache( $cache )
تجاوز خلفية التخزين المؤقت. استدعِ هذه الطريقة قبل Queuety::init() لاستخدام تنفيذ مخصص.
Queuety::set_cache( new RedisCache() );
Queuety::init( $connection );
QUEUETY_CACHE_TTL
مدة البقاء الافتراضية للتخزين المؤقت بالثواني (الافتراضي: 5). عيّن هذا الثابت في wp-config.php لتغيير مدة البقاء الافتراضية التي تستخدمها عمليات التخزين المؤقت الداخلية.
define( 'QUEUETY_CACHE_TTL', 10 );
راجع التخزين المؤقت لمعرفة التفاصيل حول الخلفيات والاكتشاف التلقائي.
سجل أحداث آلة الحالات
Queuety::machine_events()
الحصول على مثيل StateMachineEventLog.
$log = Queuety::machine_events();
سجل أحداث سير العمل
Queuety::workflow_events()
الحصول على مثيل WorkflowEventLog.
$log = Queuety::workflow_events();
Queuety::workflow_timeline( $workflow_id, $limit = 100, $offset = 0 )
الحصول على التسلسل الزمني الكامل لأحداث سير العمل. تُرجع الطريقة مصفوفة من صفوف الأحداث مرتبة حسب المعرّف.
$events = Queuety::workflow_timeline( $workflow_id );
$next = Queuety::workflow_timeline( $workflow_id, 100, 100 );
يحتوي كل صف حدث على: id وworkflow_id وjob_id وparent_event_id وstep_index وstep_name وstep_type وhandler وevent وqueue وattempt وinput وoutput وstate_before وstate_after وcontext وartifacts وchunks وerror وerror_message (منسوخ من error.message) وduration_ms وcreated_at.
Queuety::workflow_trace( $workflow_id )
الحصول على حزمة تتبّع موحّدة لمصحّح سير العمل UI.
$trace = Queuety::workflow_trace( $workflow_id );
يحتوي التتبّع على workflow وsteps مجمّعة وevents خام وjobs وlogs وartifacts وchunks وsignals وwait_dependencies.
Queuety::trace_input( $input )
تعيين مدخل على مستوى التطبيق لخطوة سير العمل الجاري تنفيذها.
Queuety::trace_output( $output )
تعيين مخرج على مستوى التطبيق لخطوة سير العمل الجاري تنفيذها.
Queuety::trace_context( array $context )
دمج سياق على مستوى التطبيق في خطوة سير العمل الجاري تنفيذها.
Queuety::workflow_state_at( $workflow_id, $step_index )
الحصول على الحالة العامة بعد إكمال خطوة محددة من سير العمل أو استئنافها، أو null إذا لم يُعثر عليها.
$state = Queuety::workflow_state_at( $workflow_id, 2 );
راجع سجل أحداث سير العمل للاطلاع على حالات الاستخدام وأوامر CLI.
المثيلات الداخلية
تُرجع هذه الطرق مثيلات داخلية لحالات الاستخدام المتقدمة.
| الطريقة | تُرجع | الوصف |
|---|---|---|
Queuety::queue() |
Queue |
عمليات قائمة الانتظار (المطالبة، والتحرير، والدفن) |
Queuety::worker() |
Worker |
التحكم في عملية العامل |
Queuety::workflow_manager() |
Workflow |
تنسيق سير العمل |
Queuety::machines() |
StateMachine |
إدارة دورة حياة آلة الحالات |
Queuety::connection() |
Connection |
اتصال قاعدة البيانات |
Queuety::batch_manager() |
BatchManager |
إدارة دورة حياة الدفعات (الإلغاء، والتقليم) |
Queuety::chunk_store() |
ChunkStore |
حفظ الأجزاء لخطوات البث |
Queuety::machine_events() |
StateMachineEventLog |
أحداث تتبّع آلة الحالات وحزم التتبّع الموحّدة |
Queuety::workflow_events() |
WorkflowEventLog |
أحداث تتبّع سير العمل وحزم التتبّع الموحّدة |
Queuety::resource_manager() |
ResourceManager |
ملفات قبول العامل، والميزانيات الموزونة، وفحص ذاكرة النظام |
Queuety::cache() |
Cache |
مثيل خلفية التخزين المؤقت |
الاختبار
Queuety::fake()
استبدال قائمة الانتظار بمحاكاة زائفة داخل الذاكرة للاختبار. تُرجع الطريقة مثيل QueueFake يسجّل المهام المرسلة دون الاتصال بقاعدة البيانات. يسجّل create_batch() أيضًا بيانات وصفية زائفة للدفعات؛ ويُتحقق من السلاسل عبر المهام الفردية التي ترسلها.
$fake = Queuety::fake();
SendEmailJob::dispatch( 'user@example.com', 'Hello', 'Hi!' );
$fake->assert_pushed( SendEmailJob::class );
Queuety::reset()
إعادة ضبط كل الحالة الداخلية، بما فيها محاكاة قائمة الانتظار الزائفة. استدعِها في tearDown().
Queuety::reset();
طرق QueueFake
| الطريقة | الوصف |
|---|---|
assert_pushed( string $class, ?Closure $callback ) |
التحقق من إرسال صنف مهمة. يرشّح ردّ النداء الاختياري بيانات المهمة. |
assert_pushed_times( string $class, int $count ) |
التحقق من إرسال المهمة N مرة بالضبط. |
assert_not_pushed( string $class ) |
التحقق من عدم إرسال أي مهمة. |
assert_nothing_pushed() |
التحقق من عدم إرسال أي مهام على الإطلاق. |
assert_batched( ?Closure $callback ) |
التحقق من إرسال دفعة. يرشّح ردّ النداء الاختياري بيانات الدفعة. |
pushed( string $class ) |
الحصول على كل عمليات الإرسال المسجّلة لصنف. تُرجع مصفوفة. |
batches() |
الحصول على كل الدفعات المسجّلة. تُرجع مصفوفة. |
reset() |
مسح كل المهام والدفعات المسجّلة. |
راجع الاختبار للاطلاع على أمثلة كاملة.
الواجهات
Handler
واجهة لمعالجات المهام البسيطة.
interface Handler {
public function handle( array $payload ): void;
public function config(): array;
}
يمكن أن تُرجع config() أيًا من queue وmax_attempts وbackoff وrate_limit وconcurrency_group وconcurrency_limit وcost_units.
Step
واجهة لمعالجات خطوات سير العمل.
interface Step {
public function handle( array $state ): array;
public function config(): array;
}
يمكن أن تُرجع config() أيًا من max_attempts وbackoff وconcurrency_group وconcurrency_limit وcost_units.
Contracts\ForEachHandler
واجهة لمعالجات فروع التكرار الديناميكية.
namespace Queuety\Contracts;
interface ForEachHandler {
public function handle_item( array $state, mixed $item, int $index ): array;
public function config(): array;
}
يمكن أن تُرجع config() أيًا من max_attempts وbackoff وrate_limit وconcurrency_group وconcurrency_limit وcost_units.
Contracts\ForEachReducer
مُخفِّض اختياري لنتائج التكرار.
namespace Queuety\Contracts;
interface ForEachReducer {
public function reduce( array $state, array $for_each ): array;
}
Contracts\Compensation
واجهة لمعالجات التعويض عن الخطوات.
namespace Queuety\Contracts;
interface Compensation {
public function handle( array $state ): void;
}
Contracts\RepeatCondition
واجهة لشروط الحلقات المستخدمة بواسطة repeat_until() وrepeat_while() عندما تكون مقارنة مفاتيح الحالة محدودة أكثر من اللازم.
namespace Queuety\Contracts;
interface RepeatCondition {
public function matches( array $state ): bool;
}
Contracts\StateAction
واجهة لإجراءات دخول الحالة الموضوعة في قائمة الانتظار.
namespace Queuety\Contracts;
interface StateAction {
public function handle( array $state, ?string $event = null, array $event_payload = [], array $payload = [] ): array|string;
}
يتلقى $payload قيمة payload المنظّمة من تعريف الإجراء، إذا كانت الآلة معرّفة بها. أرجِع تحديثات الحالة العامة. أدرج _event و_event_payload اختياريًا عندما ينبغي للإجراء تنفيذ انتقال فوري.
يمكن لإجراءات الحالة أيضًا تعريف طريقة اختيارية config(). يقرأ Queuety منها concurrency_group وconcurrency_limit وcost_units عند وضع إجراء الدخول في قائمة الانتظار.
Contracts\StateGuard
واجهة لشروط الحراسة الخاصة بانتقالات آلة الحالات.
namespace Queuety\Contracts;
interface StateGuard {
public function allows( array $state, array $event_payload, string $event, array $payload = [] ): bool;
}
Contracts\Job
واجهة لأصناف المهام القابلة للإرسال المستقلة. تخزّن أصناف المهام حمولتها كخصائص عامة ومنطق التنفيذ في handle().
namespace Queuety\Contracts;
interface Job {
public function handle(): void;
}
يمكن لأصناف المهام اختياريًا تعريف طريقة middleware() تُرجع مصفوفة من مثيلات Contracts\Middleware.
Contracts\Cache
واجهة لخلفيات التخزين المؤقت. راجع التخزين المؤقت للاطلاع على عمليات التنفيذ المضمّنة والخلفيات المخصصة.
namespace Queuety\Contracts;
interface Cache {
public function get( string $key ): mixed;
public function set( string $key, mixed $value, int $ttl = 0 ): void;
public function delete( string $key ): void;
public function has( string $key ): bool;
public function add( string $key, mixed $value, int $ttl = 0 ): bool;
public function flush(): void;
}
| الطريقة | تُرجع | الوصف |
|---|---|---|
get( $key ) |
mixed |
استرجاع قيمة. تُرجع null إذا لم يُعثر عليها أو انتهت صلاحيتها. |
set( $key, $value, $ttl ) |
void |
تخزين قيمة. تعني مدة بقاء قدرها 0 عدم انتهاء الصلاحية. |
delete( $key ) |
void |
إزالة قيمة. |
has( $key ) |
bool |
التحقق من وجود مفتاح وعدم انتهاء صلاحيته. |
add( $key, $value, $ttl ) |
bool |
تعيين ذري إذا لم يكن المفتاح موجودًا. تُرجع true إذا عُيّنت القيمة. |
flush() |
void |
إزالة جميع العناصر من التخزين المؤقت. |
WorkflowEventLog
يسجّل انتقالات خطوات سير العمل مع سياق التتبّع الكامل. يُتاح عبر Queuety::workflow_events().
| الطريقة | تُرجع | الوصف |
|---|---|---|
record_event( array $event ) |
void |
تسجيل حدث تتبّع خام |
record_step_started( ... ) |
void |
تسجيل حدث step_started مع المدخل والحالة قبل التنفيذ |
record_step_completed( ... ) |
void |
تسجيل حدث step_completed مع المدخل والمخرج والحالة قبل التنفيذ وبعده |
record_step_failed( ... ) |
void |
تسجيل حدث step_failed مع سياق التتبّع وتفاصيل الخطأ المنظّمة |
get_timeline( int $workflow_id, ?int $limit = 100, int $offset = 0 ) |
array |
الحصول على أحداث تتبّع سير العمل بالترتيب، مع إمكانية تقسيم النتائج إلى صفحات |
get_trace( int $workflow_id ) |
array |
الحصول على حزمة تتبّع موحّدة |
get_state_at_step( int $workflow_id, int $step_index ) |
array|null |
الحصول على الحالة العامة بعد إكمال خطوة محددة أو استئنافها |
prune( int $older_than_days ) |
int |
حذف الأحداث الأقدم من عدد الأيام المحدد. تُرجع عدد الصفوف المحذوفة. |
StateMachineEventLog
يسجّل دورة حياة آلة الحالات وإجراءاتها وانتقالاتها وأحداث شروط الحراسة، باستخدام حقول التتبّع نفسها لأحداث سير العمل.
| الطريقة | تُرجع | الوصف |
|---|---|---|
record_event( array $event ) |
void |
تسجيل حدث تتبّع خام للآلة |
get_timeline( int $machine_id, ?int $limit = 100, int $offset = 0 ) |
array |
الحصول على أحداث تتبّع الآلة بالترتيب، مع إمكانية تقسيم النتائج إلى صفحات |
get_trace( int $machine_id ) |
array |
الحصول على حزمة تتبّع موحّدة للآلة |
get_state_at_event( int $machine_id, int $event_id ) |
array|null |
الحصول على الحالة العامة بعد حدث تتبّع محدد للآلة |
prune( int $older_than_days ) |
int |
حذف الأحداث الأقدم من عدد الأيام المحدد. تُرجع عدد الصفوف المحذوفة. |
Contracts\StreamingStep
واجهة لمعالجات خطوات سير العمل التي تنتج تدفقًا من الأجزاء. يُحفظ كل عنصر مولّد في قاعدة البيانات فورًا. راجع خطوات البث.
namespace Queuety\Contracts;
interface StreamingStep {
public function stream( array $state, array $existing_chunks = [] ): \Generator;
public function on_complete( array $chunks, array $state ): array;
public function config(): array;
}
| الطريقة | الوصف |
|---|---|
stream( $state, $existing_chunks ) |
مولّد ينتج أجزاء نصية. يؤدي كل إنتاج إلى كتابة فورية في قاعدة البيانات. عند إعادة المحاولة، يحتوي $existing_chunks على الأجزاء المحفوظة سابقًا. |
on_complete( $chunks, $state ) |
يُستدعى بعد انتهاء التدفق. يُرجع بيانات لدمجها في حالة سير العمل. |
config() |
إعداد اختياري. يدعم max_attempts وbackoff وconcurrency_group وconcurrency_limit وcost_units. |
ChunkStore
يدير حفظ الأجزاء لخطوات البث. يُتاح عبر Queuety::chunk_store().
| الطريقة | تُرجع | الوصف |
|---|---|---|
get_chunks( int $job_id ) |
string[] |
جلب كل أجزاء مهمة بترتيب فهرس الجزء |
append_chunk( int $job_id, int $chunk_index, string $content, ?int $workflow_id, ?int $step_index ) |
void |
إلحاق جزء واحد |
clear_chunks( int $job_id ) |
void |
حذف كل أجزاء مهمة |
chunk_count( int $job_id ) |
int |
عدّ أجزاء مهمة |
get_accumulated( int $job_id ) |
string |
ضم كل الأجزاء في سلسلة نصية واحدة |
Heartbeat
مساعد ثابت لإرسال نبضات النشاط من داخل معالجات الخطوات وخطوات البث. راجع نبضات النشاط.
| الطريقة | الوصف |
|---|---|
Heartbeat::init( int $job_id, Connection $conn ) |
تعيين سياق المهمة. يستدعيها العامل تلقائيًا. |
Heartbeat::beat( array $progress = [] ) |
إرسال نبضة نشاط. تحدّث reserved_at وتخزّن بيانات التقدّم اختياريًا في heartbeat_data. |
Heartbeat::clear() |
مسح سياق المهمة. يستدعيها العامل تلقائيًا. |
Heartbeat::current_job_id() |
الحصول على معرّف المهمة الحالي (للاختبار). |
Contracts\Middleware
واجهة للبرمجيات الوسيطة الخاصة بالمهام. تحيط البرمجيات الوسيطة بتنفيذ المهمة ضمن مسار يشبه طبقات البصلة.
namespace Queuety\Contracts;
interface Middleware {
public function handle( object $job, \Closure $next ): void;
}
السمات
Dispatchable
توفّر طرق إرسال ثابتة لأصناف المهام التي تنفّذ Contracts\Job. وتُمرّر وسيطات المُنشئ لإنشاء مثيل المهمة.
use Queuety\Contracts\Job;
use Queuety\Dispatchable;
class SendEmailJob implements Job {
use Dispatchable;
// ...
}
// Dispatches a new SendEmailJob instance
SendEmailJob::dispatch( 'user@example.com', 'Subject', 'Body' );
| الطريقة | تُرجع | الوصف |
|---|---|---|
dispatch( ...$args ) |
PendingJob |
إنشاء مثيل وإرساله |
dispatch_if( bool $condition, ...$args ) |
PendingJob|null |
الإرسال فقط إذا كانت $condition صحيحة |
dispatch_unless( bool $condition, ...$args ) |
PendingJob|null |
الإرسال فقط إذا كانت $condition خاطئة |
with_chain( array $jobs ) |
ChainBuilder |
بدء سلسلة من صنف المهمة هذا |
// Conditional dispatch
SendEmailJob::dispatch_if( $user->wants_email, $user->email, 'Hello', 'Hi!' );
SendEmailJob::dispatch_unless( $maintenance_mode, $user->email, 'Hello', 'Hi!' );
// Chain from a job class
FetchDataJob::with_chain( [
new ProcessDataJob(),
new NotifyCompleteJob(),
] )->dispatch();
خصائص المهمة
يمكن لأصناف المهام تعريف خصائص عامة يقرأها العامل عبر الاستبطان لتجاوز سلوك إعادة المحاولة والمهلة الزمنية.
| الخاصية | النوع | الوصف |
|---|---|---|
$tries |
int |
الحد الأقصى للمحاولات قبل دفن المهمة |
$timeout |
int |
الحد الأقصى لوقت التنفيذ بالثواني (يتطلب pcntl) |
$backoff |
array |
قيم التأخير المتزايدة بالثواني لكل محاولة إعادة |
class ImportProductsJob implements Job {
use Dispatchable;
public int $tries = 5;
public int $timeout = 120;
public array $backoff = [ 10, 30, 60, 120 ];
// ...
}
خطاف failed()
عندما تُدفن مهمة بعد استنفاد جميع محاولات الإعادة، يستدعي العامل طريقة failed() على مثيل المهمة إذا كانت معرّفة.
public function failed( \Throwable $exception ): void {
error_log( "Job failed: {$exception->getMessage()}" );
}
البرمجيات الوسيطة المضمّنة
تنفّذ جميع أصناف البرمجيات الوسيطة Contracts\Middleware، وتقع ضمن مساحة الأسماء Queuety\Middleware.
| الفئة | الوصف |
|---|---|
RateLimited( int $max, int $window ) |
فرض حد لمعدل $max عملية تنفيذ لكل $window ثانية |
Timeout( int $seconds ) |
إنهاء المهمة بعد $seconds ثانية (يتطلب pcntl) |
UniqueJob( ?string $key ) |
منع التنفيذ المتزامن باستخدام قفل قاعدة بيانات |
WithoutOverlapping( string $key, int $release_after ) |
منع تداخل عمليات التنفيذ مع انتهاء صلاحية القفل تلقائيًا |
ThrottlesExceptions( int $max_attempts, int $decay_minutes ) |
الحد من الاستثناءات لمنع تدفق المهام عند تعطل خدمة خارجية |
اطّلع على Middleware لمعرفة تفاصيل الاستخدام والأمثلة.
التعدادات
Priority
enum Priority: int {
case Low = 0;
case Normal = 1;
case High = 2;
case Urgent = 3;
}
JobStatus
enum JobStatus: string {
case Pending = 'pending';
case Processing = 'processing';
case Completed = 'completed';
case Failed = 'failed';
case Buried = 'buried';
}
WorkflowStatus
enum WorkflowStatus: string {
case Running = 'running';
case Completed = 'completed';
case Failed = 'failed';
case Paused = 'paused';
case WaitingForSignal = 'waiting_for_signal';
case WaitingForWorkflows = 'waiting_for_workflows';
case Cancelled = 'cancelled';
}
StateMachineStatus
enum StateMachineStatus: string {
case Running = 'running';
case WaitingEvent = 'waiting_event';
case Completed = 'completed';
case Failed = 'failed';
case Paused = 'paused';
case Cancelled = 'cancelled';
}
BackoffStrategy
enum BackoffStrategy: string {
case Fixed = 'fixed';
case Linear = 'linear';
case Exponential = 'exponential';
}
ForEachMode
enum ForEachMode: string {
case All = 'all';
case FirstSuccess = 'first_success';
case Quorum = 'quorum';
}
WaitMode
enum WaitMode: string {
case All = 'all';
case Any = 'any';
case Quorum = 'quorum';
}
LogEvent
enum LogEvent: string {
case Started = 'started';
case Completed = 'completed';
case Failed = 'failed';
case Buried = 'buried';
case Retried = 'retried';
case WorkflowStarted = 'workflow_started';
case WorkflowCompleted = 'workflow_completed';
case WorkflowFailed = 'workflow_failed';
case WorkflowPaused = 'workflow_paused';
case WorkflowResumed = 'workflow_resumed';
case WorkflowCancelled = 'workflow_cancelled';
case WorkflowRewound = 'workflow_rewound';
case WorkflowForked = 'workflow_forked';
case WorkflowDeadlineExceeded = 'workflow_deadline_exceeded';
case Debug = 'debug';
}
OverlapPolicy
enum OverlapPolicy: string {
case Allow = 'allow';
case Skip = 'skip';
case Buffer = 'buffer';
}
اطّلع على Scheduling لمعرفة تفاصيل آلية عمل كل سياسة.
السمات
#[QueuetyHandler]
سمة PHP 8 للتسجيل التلقائي. راجع PHP Attributes.
use Queuety\Attributes\QueuetyHandler;
#[QueuetyHandler( name: 'send_email', queue: 'emails', max_attempts: 5 )]
class SendEmailHandler implements Handler {
// ...
}
جسر CLI
Queuety::cli_command()
يعيد اسم الأمر الجذر المنشور لـ WP-CLI.
الأمر الجذر الافتراضي هو queuety. عرّف QUEUETY_CLI_COMMAND قبل بدء Queuety إذا أردت نشر الأمر تحت اسم مختلف.
Queuety::cli_command_map()
يعيد فهرسًا متسلسلًا من Queuety CLI للأدوات التي تحتاج إلى معرفة سطح الأوامر المتاح دون فحص أصناف WP-CLI.
يتضمن كل إدخال:
- معرّف عملية ثابتًا
- مسار CLI نسبيًا
- صنف المعالج وطريقته في WP-CLI
- أهداف التنفيذ المحتملة
- المهايئ الذي يطبّع وسائط CLI الخام إلى خطة تنفيذ
Queuety::resolve_cli_command( $path, $args, $assoc_args )
يحوّل استدعاء CLI محللًا إلى خطة التنفيذ التي ينبغي للأداة تشغيلها.
$plan = Queuety::resolve_cli_command(
[ 'workflow', 'export' ],
[ '42' ],
[ 'output' => '/tmp/workflow.json' ]
);
echo $plan['callable']; // Queuety\Queuety::export_workflow_to_file
print_r( $plan['arguments'] );
تراعي خطط التنفيذ وسيلة النقل عمدًا:
- تُحل الأوامر إلى دوال استدعاء عامة في PHP مع وسائط مطبّعة
- يسرد الفهرس كل أهداف التنفيذ المحتملة مسبقًا، بينما يحدد
callableوtransportالفرع المختار للمدخل المحلل
هذا هو التنسيق المعتاد الذي تستخدمه Queuety لأدوات الوكلاء: معرّف عملية ثابت، وهدف API عام، وتطبيع يتولاه المهايئ للمسائل الخاصة بـ CLI فقط، مثل القيم الافتراضية لقوائم الانتظار، وفك ترميز حمولة JSON، والتفرع إلى مجموعة العمليات العاملة، والتعامل مع ملفات تصدير سير العمل.