محمد
3 سال پیش توسط محمد مطرح شد
10 پاسخ

متوقف شدن job ها درلاراول

سلام خدمت همه، من یه سری job رو با queue دارم اجرا میکنم ولی بعضی از جاب ها failed میشن و این ارور رو میدن:

MaxAttemptsExceededException: App\Jobs\SendSms has been attempted too many times or run too long. The job may have previously timed out

لطفا کسایی که مشکلشو میدونن راهنمایی کنن، ممنون.


ثبت پرسش جدید
محمد
تخصص : طراح رابط کاربری، برنامه نویس...
@mhmd.dev 3 سال پیش مطرح شد
مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش مطرح شد
0

خطا کاملا مشخصه، جاب ها یا در زمان اجرا با خطا مواجه شدن یا زمانشون از حداکثر زمان اجرا طولانی تر شده
بعد از چند بار تلاش از اون جاب رد میشه و جاب های بعدی رو اجرا میکنه


متین طیبی نیا
تخصص : backend
@MatinTayebi 3 سال پیش مطرح شد
0

@mhmd.dev

job که ارسال میکنید چی هست؟ که نیاز به پردازش زیاد داره که از صف خارج میشه و fail میشه


محمد
تخصص : طراح رابط کاربری، برنامه نویس...
@mhmd.dev 3 سال پیش مطرح شد
0

@mehranmarandi90
بله، جاب ها در واقع هر 1 دقیقه اجرا میشن، به دلیل کاری که داریم، و ممکنه تو 1 دقیقه 10 ها پیامک ارسال بشه، آیا راهی هست که این اتفاق نیفته؟ یا اگه از Redis به جای database استفاده کنم کمکی میکنه؟


محمد
تخصص : طراح رابط کاربری، برنامه نویس...
@mhmd.dev 3 سال پیش مطرح شد
0

@MatinTayebi
تو هر یه دقیقه ای که اجرا میشن ممکنه 10 ها پیامک ارسال بشه، و البته من مجبورم هر دقیقه اجرا شون کنم چون مثلا 100 تا کاربر تو ساعت 12:03 دقیقه پیامک دریافت میکنن و ممکنه نفرات بعدی تو ساعت 12:04 دقیقه باشن.


متین طیبی نیا
تخصص : backend
@MatinTayebi 3 سال پیش آپدیت شد
0

خب چرا شما از سرویس دیگه برای ارسال پیام ها استفاده نمیکنید؟
به عنوان مثال RabbitMQ که مستندات زیادی داره و راحت با لاراول مچ میشه

RabbitMQ

یا از یک سرویس ایرانی برای این کار استفاده کنید.


متین طیبی نیا
تخصص : backend
@MatinTayebi 3 سال پیش مطرح شد
0

@mhmd.dev
یک آموزش از یوتیوب پیدا کردم که یک میکرو سرور با لاراول و داکتر درست میکنه و ارسال job ها با RabbitMQ انجام میده و نکته دیگه اینکه نیازی به یادگیری داکر نیست که از RabbitMQ استفاده کنید

RabbitMQ


مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
0

چندین سناریو برای حل این مسئله میشه ارائه داد
ارسال پیامک ها بصورت async ،
اگر متن پیامک های یکسان هستن ارسال بصورت Bulk که معمولا در مستندات سرویس های پیامک این دو نوع وجود دارن
ولی یک راه حل ساده و کم دردسر اینه که شما ارسال هر پیامک رو یک job در نظر بگیرید.
اینکه میفرمایید هر 1 دقیقه جاب ها اجرا میشن رو دقیق متوجه نشدم، اگر از سیستم job & queue خود لاراول استفاده میکنید وقتی شما دستور

php artisan queue:work

رو اجرا میکنید در حقیقت worker شما شروع به کار میکنه و بلافاصله هر کدوم از job ها که تموم شد جاب بعدی رو شروع میکنه (حالا میخواد 1 ثانیه طول کشیده باشه یا 1 دقیقه) و اگر هر یک دقیقه دارید این دستور رو اجرا میکنید در اصل دارید چند ورکر رو همزمان فعال میکنید (بهتره ابتدا worker قبلی رو متوقف کنید و دستور جدید رو اجرا کنید)

  • اگر در پروژه خودتون بجز ارسال پیامک کار های دیگه ای رو هم به queue اضافه میکنید و فکر میکنید ممکنه اون ها پشت صف ارسال پیامک گیر کنن، میتونید اونها رو در صف های دیگه ای قرار بدید که با اولویت بالاتری اجرا بشن.

مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش مطرح شد
1

@mhmd.dev
لینک آموزش RabbitMQ که قرار دادید خیلی مفید بود، ولی فکر میکنم برای همچین کارهای ساده و روتینی که توسط یک پروژه انجام میشه RabbitMQ زیادی بزرگ باشه، فکر میکنم این queue manager بیشتر برای سیستم هایی با میکروسرویس های زیاد باشه که نیاز دارن یک کار در چندین میکروسرویس مختلف انجام بشه به همین دلیل یک سرویس مدیریت صف مجزا هم با RabbitMQ پیاده میکنن.


محمد
تخصص : طراح رابط کاربری، برنامه نویس...
@mhmd.dev 3 سال پیش مطرح شد
1

@mehranmarandi90
@MatinTayebi
خییل ممنون از توضیحاتتون و ممنون از اینکه RabbitMQ رو معرفی کردید بهم الان به کارم نیومد ولی باهاش آشنا شدم و دیدم که کلی خفنه و تو آینده حتما ازش استفاده میکنم، والا یه سری تغییرات تو کدا دادم که بیاد پیامک هایی که ارسال نشدنو بذاره تو تایمایی که هیچ پیامکی برای ارسال نیست و سیستم خلوته، در آخرم بگم که ممنون از وقتی که گذاشتید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام