سلام خدمت همه، من یه سری job رو با queue دارم اجرا میکنم ولی بعضی از جاب ها failed میشن و این ارور رو میدن:
MaxAttemptsExceededException: App\Jobs\SendSms has been attempted too many times or run too long. The job may have previously timed out
لطفا کسایی که مشکلشو میدونن راهنمایی کنن، ممنون.
خطا کاملا مشخصه، جاب ها یا در زمان اجرا با خطا مواجه شدن یا زمانشون از حداکثر زمان اجرا طولانی تر شده
بعد از چند بار تلاش از اون جاب رد میشه و جاب های بعدی رو اجرا میکنه
job که ارسال میکنید چی هست؟ که نیاز به پردازش زیاد داره که از صف خارج میشه و fail
میشه
@mehranmarandi90
بله، جاب ها در واقع هر 1 دقیقه اجرا میشن، به دلیل کاری که داریم، و ممکنه تو 1 دقیقه 10 ها پیامک ارسال بشه، آیا راهی هست که این اتفاق نیفته؟ یا اگه از Redis به جای database استفاده کنم کمکی میکنه؟
@MatinTayebi
تو هر یه دقیقه ای که اجرا میشن ممکنه 10 ها پیامک ارسال بشه، و البته من مجبورم هر دقیقه اجرا شون کنم چون مثلا 100 تا کاربر تو ساعت 12:03 دقیقه پیامک دریافت میکنن و ممکنه نفرات بعدی تو ساعت 12:04 دقیقه باشن.
خب چرا شما از سرویس دیگه برای ارسال پیام ها استفاده نمیکنید؟
به عنوان مثال RabbitMQ
که مستندات زیادی داره و راحت با لاراول مچ میشه
یا از یک سرویس ایرانی برای این کار استفاده کنید.
چندین سناریو برای حل این مسئله میشه ارائه داد
ارسال پیامک ها بصورت async ،
اگر متن پیامک های یکسان هستن ارسال بصورت Bulk که معمولا در مستندات سرویس های پیامک این دو نوع وجود دارن
ولی یک راه حل ساده و کم دردسر اینه که شما ارسال هر پیامک رو یک job در نظر بگیرید.
اینکه میفرمایید هر 1 دقیقه جاب ها اجرا میشن رو دقیق متوجه نشدم، اگر از سیستم job & queue خود لاراول استفاده میکنید وقتی شما دستور
php artisan queue:work
رو اجرا میکنید در حقیقت worker شما شروع به کار میکنه و بلافاصله هر کدوم از job ها که تموم شد جاب بعدی رو شروع میکنه (حالا میخواد 1 ثانیه طول کشیده باشه یا 1 دقیقه) و اگر هر یک دقیقه دارید این دستور رو اجرا میکنید در اصل دارید چند ورکر رو همزمان فعال میکنید (بهتره ابتدا worker قبلی رو متوقف کنید و دستور جدید رو اجرا کنید)
@mhmd.dev
لینک آموزش RabbitMQ که قرار دادید خیلی مفید بود، ولی فکر میکنم برای همچین کارهای ساده و روتینی که توسط یک پروژه انجام میشه RabbitMQ زیادی بزرگ باشه، فکر میکنم این queue manager بیشتر برای سیستم هایی با میکروسرویس های زیاد باشه که نیاز دارن یک کار در چندین میکروسرویس مختلف انجام بشه به همین دلیل یک سرویس مدیریت صف مجزا هم با RabbitMQ پیاده میکنن.
@mehranmarandi90
@MatinTayebi
خییل ممنون از توضیحاتتون و ممنون از اینکه RabbitMQ رو معرفی کردید بهم الان به کارم نیومد ولی باهاش آشنا شدم و دیدم که کلی خفنه و تو آینده حتما ازش استفاده میکنم، والا یه سری تغییرات تو کدا دادم که بیاد پیامک هایی که ارسال نشدنو بذاره تو تایمایی که هیچ پیامکی برای ارسال نیست و سیستم خلوته، در آخرم بگم که ممنون از وقتی که گذاشتید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟