سلام و خسته نباشید به همگی ...
بهتره با مثال توضیح بدم: در لاراول شما کارهایی که قراره در صف بزارید مثل ارسال ایمیل ها ، در دیتابیس در جدول job ذخیرش میکنید
و وقتی در cmd دستور php artisan queue:work
رو میزنید یک سرور منتظر میمونه تا هر row که به جدول اضافه میشه بره و کار مربوط بهش رو انجام بده ...
این که منتظر میمونه و وقتی دیتایی وارد دیتا بیس میشه و .... چطور انجام میشه ...
و اینکه اصلا این سیستم صف ها به چه شکلی چیده میشن
یعنی شخصی نیست که بدونه queue:work لاراول چطور کار میکنه؟
آیا به این صورته؟
while (true) {
// get first row from job table and do it
}
سرور منتظر نمیمونه! اگه قرار باشه منتظر بمونه باید چیزی شبیه nodejs باشه که event ایجاد بشه و یک listener داشته باشه.
درون لاراول یک کوئری زده میشه و جاب ها رو از درون دیتابیس میگیره و هرکدوم رو یکی یکی اجرا میکنه و در اخر هم کار تموم بشه قطع میشه روند اجرا. به بعدش اگه چیز جدیدی اظافه بشه ران نمیشه! باید دوباره از اول دستور اجرای جاب رو بزنید.
شما برای اجراهای بعدی باید از کرون جاب استفاده کنید.
سلام. این وضع جواب دادن نیست! مثلا تخصص هم زدید ارشد پایتون دیجی کالا! اگه شما واقعا ارشد باشید توی دیجی کالا , من دیگه از دیجی کالا چیزی نمیخرم چون کسی که ارشد هست باید بدونه چجوری جواب یکی دیگه رو بده! به قرآن نمیدونم که نشد جواب!
نمیدونم یا من اسمش رو اشتباه میگم یا هر مشکلی که از سمت من هست ، به کنار
وقتی برای مثال یک کلاس event رو implements میکنیم از ShouldQueue اون event در صف قراره میگیره یا به عبارتی میره و داخل دیتابیس ذخیره میشه... درسته؟
اگه درسته ... وقتی من queue:work or queue:listen میزنم کارهای لازم رو انجام میده و وقتی باز event صدا زده میشه کاری که قرار بوده event انجام بده در صف قرار میگیره و اجرا میشه بلافاصله
اینهایی که گفتم درستن؟
یعنی شخصی نیست که بدونه queue:work لاراول چطور کار میکنه؟
آیا به این صورته؟
while (true) {
// get first row from job table and do it
}
لاراول یک کد open source هست، لطف کنید یه زحمت به خودتون بدید وارد کدهای پکیج اصلی بشید دنبال command مربوط به work:queue بگردید ببینید در قالب این کد چه اتفاقی میافته ! هر کی بخواد بهتون بگه چطور کار میکنه باید بره اونجا کدشو ببینیه !!
@Serjik
منم الان دارم بهتون میگم دنبال این commad در هسته بگردید کدی که توش قرار داره اینکار رو میکنه با خودنش میتونید درکنید چه شکلی اینکار انجام میشه.
و اینکه این بر اساس قاعده listener و event پیادهسازی شده و یک worker داره حالا این worker بر اساس تنظیمات worker مشخص میشه
@hesammousavi
بله
بسیار ممنونم ازتون
همینم که به عنوان بهترین پاسخ انتخاب کردم ... با توجه به کدهایی که در هسته لاراول و job خوندم ، متوجه شدم که در کل همچین کاری انجام داده میشه
دوستانی که براشون سواله بدونن :)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟