در قسمت اول آموزش ساخت Queue در PHP به طور کامل صف بندی و اهمیت آن در اپلیکشن ها را بررسی کردیم و در قسمت دوم نیز در قالب مثال در کد php صف بندی را پیاده سازی و استفاده کردیم.
در این بخش از ساخت Queue در PHP فرض می کنیم که اپلیکیشن ما بعد از ثبت موفق هر سفارش, یک ایمیل را برای کاربر ارسال می کند.
مرحله اول. ساخت یک صف (Queue)
در اینجا دیتابیس فرضی خود را ایجاد می کنیم . اسم جدول داخل این دیتابیس را queue
قرار می دهیم, جایی که هر خط یک ‘job’ برای پردازش است و این جدول دارای فیلد های زیر است :
Id
: یک آی دی یکتا برای هر عملیات (task) است.data
: داده ی تسکی که پردازش می شود. می تواند مسیر یک تصویر, ایمیلی برای ارسال یا دامنه ای برای ثبت باشد – هر چیری که مربوط به کسب و کار شماست.status
: یک لیست از وضعیت های ممکن یک job است :new
,proccessing
,done
,failed
. این فیلد هم بسیار کاربردی و پراستفاده است.error_message
: یک فیلد اختیاری برای دریافت اطلاعات بیشتر از خطایی که هنگام fail شدن یک پردازش ایجاد شده است مانند پر شدن فضا, زمان یا غیره..
همچنین پیشنهاد میشود که چند فیلد دیگر را هم اضافه کنید:
created_at
: زمان ایجاد یک queue بصورت timestamp . مقدار این فیلد یکبار ست می شود و هرگز تغییر نمی کند.updated_at
: زمان تغییر یا دسترسی به صف بصورت timestamp . این مقدار چندین در زمان های مختلف تغییر می کند.agent_id
: در صورتی که بیشتر از یک اسکریپت برای پردازش یک صف دارید استفاده می شود (در قسمت بعدی این مقاله بیشتر بررسی می شود).
مرحله دوم. پیاده سازی آداپتور صف
در اینجا یک کلاس ساده Queue
ساختیم که دارای یک متد addItem
برای افزودن یک صف به داخل جدول queue با استفاده از کویری SQL است.
1 2 3 4 5 6 7 8 9 10 11 |
<?php class Queue { public function addItem($item) { $query = 'INSERT INTO (status, data, created_at) my_queue VALUES ("new", "' . json_encode( $item ) . '", NOW())'; sql_run_query($query); } }; ?> |
مرحله سوم. پیدا کردن عملیات سنگین در کدها
در این مرحله نیاز است که عملیات سنگینی که در اپلیکیشن شما وجود دارد را انتخاب و کدهای آن را پیدا کنید.
در اینجا عملیات سنگین ما به فرض مثال ارسال ایمیل است که می توانید کد آن را اینجا ببینید.
1 2 3 4 5 6 7 8 9 |
<?php //this line is the heavy operation and can take up to 10 seconds of waiting since our mail server is slow Mail::send(array( 'to' => 'user@server.com', 'subject' => 'Thanks for your purchase', 'body' => '<b>Thank your very much, here are the details...</b>' )); echo 'Thanks for your purchase!'; ?> |
مرحله چهارم. صف بندی عملیات سنگین
در اینجا عملیات سنگین را با استفاده از متد addItem
ی که در مرحله اول تعریف کردیم به عنوان یک صف در دیتابیس ذخیره می کنیم.
1 2 3 4 5 6 7 8 9 |
<?php //this is now a super-fast operation since it's just a database INSERT, no real email is sent now $QueueManager->addItem(array( 'to' => 'user@server.com', 'subject' => 'Thanks for your purchase', 'body' => '<b>Thank your very much, here are the details...</b>' )); echo 'Thanks for your purchase!'; ?> |
جمع بندی
همانطور که دیدید, کار و ساخت Queue در php بسیار آسان است و برنامه نویسی را آسان تر می کند.
در بخش آخر به شما نمایش خواهم داد چطور آیتم های مختلف را پردازش و کار را بین worker های دیگر تقسیم کنید.
همچنین یک پکیج معروف از فریمورک لاراول را به پروژه خود اضافه و کار را بی نهایت ساده و حرفه ای می کنیم.
امیدوارم از آموزش ساخت Queue در PHP نهایت استفاده را برده باشید .
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.