سلام دوستان
میخواستم از صف ها توی لاراول استفاده کنم؛ روی لوکال هستم و توی schedule ویندوز یه کران جاب گذاشتم که هر یه دیقه scheduler لاراول رو ران کنه، توی تابع schedule این کد رو گذاشتم
info('schedule run');
$schedule->command('queue:restart')
->everyFiveMinutes();
$schedule->command('queue:work')->runInBackground()
->everyMinute()->withoutOverlapping();
حالا وقتی فایل لاگ رو نگا میکنم هر یه دیقه اون متن چاپ میشه ولی صف من اجرا نمیشه،
و با queue:listen امتحان کردم، و صف اجرا شد ولی اینبار اون متن هر 3 ثانیه چاپ میشه، میخواستم بدونم روند این کار چطوریه؟ روی سرور به چه شکل میشه؟ کدومش درسته؟
دستور کرون جاب شما درهاست هر یک دقیقه ست شده؟ بعدش توی کرنل کنسول شما اسکجول شما هر یکدقیقه قرار queue:work رو اجرا کنه؟ این میشه دو دقیقه یکبار :)
الان شما از کامند queue :work استفاده میکنید باید اجرا کنه درسته؟ اجرا میشه دیگه؟؟
سعی کنید از دستور زیر برای اجرا نشدن queue در مواقعی که صف شما خالیه استفاده کنید
artisan queue:work --stop-when-empty
از سی پنل استفاده میکنید؟ اگر امکانش هست کامند کرون جاب رو بذارید نگاه کنیم
ممنون اقای موسوی
من فعلا میخواستم رو لوکال تستش کنم، بعد ببرم رو سرور، که البته رو سرور هم یه دیقه ست شده کرون جاب
الان همون یه دیقه که ویندوز اسکجول رو ران میکنه و اون متن چاپ میشه، ولی صف اجرا نمیشه، ولی با listen تست میکنم، اجرا میشه ولی دیگه او متن هر سه ثانیه چاپ میشه
فعلا روی سیستم خودت مستقیما دستور queue:work رو اجرا کن و استفاده کن با این دستور صف ها بلافاصله اجرا میشن
بله، حرف شما متین، ولی میخواستم شبیه به سرور اسکجول ران کنه صف رو که ببینم چطوریه،
حالا با این
artisan queue:work --stop-when-empty
اجرا شد و این بار صف هم اجرا شد ولی الان با اجرا شدن صف که هر یه دیقه رخ میده، دو یا سه بار اون متن چاپ میشه، ینی چطوری میشه که سه بار چاپ میشه؟ اگه روند اجرا شدن رو یه توضیحی بدین ممنون میشم، چون الان بایدیه بار اون متن چاپ بشه در دیقه، درسته؟
اگر از اسجول استفاده کردین و هر یک دقیقه یکبار چک میکنه اگر چیزی در صف داشته باشید اجرا میکنه در غیر اینصورت کامند queue:work اجرا نمیشه، اینکه سه بار اجرا حتما توی تیبل queue شما سه بار داشتینش وگرنه این دستور قرار نیست 3 بار کامند اجرا کنه.
شما بررسی کنید دستوراتی که دارین یا job اگر تعریف کردین یا event اگر تعریف شده اونجا باید بگردین و ببینید برای چی 3 بار درخواست شما در تیبل صف ها قرار گرفته یا ۳ بار چاپ شده
برای اینکه بیشتر و بهتر بتونیم راهنمای تون کنیم باید کد قرار بدین و مرحله به مرحله بریم جلو و مشکل رو پیدا کنیم.
@juza66
سلام مجدد؛ ممنون واسه توضیحاتتون
protected function schedule( Schedule $schedule ) {
info('schedule run');
$schedule->command('queue:restart')
->everyFiveMinutes();
$schedule->command('queue:work --stop-when-empty')
->everyMinute()->withoutOverlapping();
}
این تابع اسکجول هست، و این هم جابی که تعریف کردم و صدا میزنم
class ChatNotAnswer implements ShouldQueue {
use Dispatchable , InteractsWithQueue , Queueable , SerializesModels;
public $chat;
public function __construct( Chat $chat ) {
$this->chat = $chat;
info( 5555 );
}
/**
* Execute the job.
*
* @return void
*/
public function handle() {
info( 66666 );
if ( ! $this->chat->answers->count() ) {
event( new SendNotifyToUser( $this->chat ) );
$this->release( 20 );
}
}
}
فراخوانی
$this->dispatch( ( new ChatNotAnswer( $chat ) )->delay( Carbon::now()->addSeconds(20) ) );
اینجا میخوام اگه گفتگویی بعد از یه مدتی بی پاسخ موند یه نوتیفیکیشن به کاربر ارسال بشه، و همین طور چک بشه بعد از یه مدت زمانی و باز اگه پاسخ نداده بود نوتیف بره، الان درست کار میکنه، ولی نه سر زمان خودش که اون 20 ثانیس، سر یه دیقه که میشه صف اجرا میشه، و اون متن schedule run هم دو سه بار چاپ میشه در صورتی که توی جدول رو هم چک میکنم فقط همون یه جاب هست
@juza66
این عکس هم از لاگ هست که هر دیقه داره دو بار اون متن رو چاپ میکنه در صورتی که جدول جاب ها خالی هست
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟