سلام خدمت دوستان گرامی.
من برای پیاده سازی صف در لاراول 5.2 باید از queue:listen به صورت کد توی کنترلرم (نه ترمینال) استفاده کنم.من این کارو با استفاده از کلاس Process انجام دادم و دستور listen رو اجرا کردم.و همونطور ک میدونید این دستور هرلحظه در حال گوش دادن به صف هستش تا به محض اضافه شدن رکورد جدید، اونو اجرا کنه.
با تحقیق هایی ک کردم متوجه شدم که باید یک پراسس جدید ایجاد بشه تا دستورqueue:listen جدا از پراسس اصلی سایت همیشه در حال گوش دادن به صف باشه.اما وقتی پراسس جدید ایجاد میکنم، با تموم شدن بلاک کد زیر، پراسس من تموم میشه.در صورتی که باید پراسس در حال اجرا بمونه.
تموم شدن پراسس رو اینجوری متوجه شدم که بعد از متد start() ، با استفاده از sleep، 10 ثانیه تاخیر دادم به اجرای کد و متوجه شدم که توی این 10 ثانیه، پراسس من در حال اجرا هستش ولی به محض رسیدن به خط آخر، پراسس کلا از بین میره و عملا دیگه listen ای در کار نیس !
سوال اصلی من اینه ک چطور باید این پراسس رو حفظ کرد ک با پایان قطعه کد، پراسس همچنان در حال اجرا و گوش دادن به صف باشه
اینم کد :
بنظرتون راه حل چیه ؟!
من برای پیاده سازی صف در لاراول 5.2 باید از queue:listen به صورت کد توی کنترلرم (نه ترمینال) استفاده کنم.من این کارو با استفاده از کلاس Process انجام دادم و دستور listen رو اجرا کردم.و همونطور ک میدونید این دستور هرلحظه در حال گوش دادن به صف هستش تا به محض اضافه شدن رکورد جدید، اونو اجرا کنه.
با تحقیق هایی ک کردم متوجه شدم که باید یک پراسس جدید ایجاد بشه تا دستورqueue:listen جدا از پراسس اصلی سایت همیشه در حال گوش دادن به صف باشه.اما وقتی پراسس جدید ایجاد میکنم، با تموم شدن بلاک کد زیر، پراسس من تموم میشه.در صورتی که باید پراسس در حال اجرا بمونه.
تموم شدن پراسس رو اینجوری متوجه شدم که بعد از متد start() ، با استفاده از sleep، 10 ثانیه تاخیر دادم به اجرای کد و متوجه شدم که توی این 10 ثانیه، پراسس من در حال اجرا هستش ولی به محض رسیدن به خط آخر، پراسس کلا از بین میره و عملا دیگه listen ای در کار نیس !
سوال اصلی من اینه ک چطور باید این پراسس رو حفظ کرد ک با پایان قطعه کد، پراسس همچنان در حال اجرا و گوش دادن به صف باشه
اینم کد :
public function run_job_commands(Request $request) { $php = PHP_BINARY; $artisan = base_path('artisan'); $process = new Process("$php $artisan queue:listen --timeout 120 --env=stage --queue=test ", base_path()); $process->start(); //sleep(20); }
بنظرتون راه حل چیه ؟!