آشنایی و کار با Queue ها و Job ها

زمان قرارگیری : 30 تیر 1396
زمان این قسمت : 47:22
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 1181 نفر
قیمت دوره 125000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 30:19:42
تعداد قسمت‌ها 51
نوع دسترسی نقدی

صف ها یکی از بخش های مهم فریمورک لاراول هستند که میتوانند به شما کمک کنند تا کارهای سیستم خود را مدیریت کنید برای مثال شما میتوانید با ایمیل ها کاری کنید که ایمیل ها با فاصله زمانی مشخص ارسال بشن در اصل در یک صف قرار بگیرند تا سرور دچار مشکل نشود و همچنین اگر ایمیلی ارسال نشد سرور این مورد را تشخص بدهد و بارها سعی کند تا آن ایمیل به درستی ارسال شود و تمام این کارها در پشت سیستم بدونه دخالت کاربران  انجام شود.

رایگان 04:34
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 1181 نفر
قیمت دوره 125000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 30:19:42
تعداد قسمت‌ها 51
نوع دسترسی نقدی

آفلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

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

دورهای پیشنهادی

مشاهده همه دوره ها
آشنایی با امکانات جدید لاراول 6

آشنایی با امکانات جدید لاراول 6

لاراول ۶ به تازگی توسط تیم توسعه دهنده لاراول معرفی شده، ما قصد داریم در این دوره امکانات جدیدی که به واسطه لاراول ۶ در اختیار توسعه دهندگان قرار گرفت...

آشنایی با امکانات جدید لاراول 5.3

آشنایی با امکانات جدید لاراول 5.3

لاراول ۵.۳ بزودی به طور رسمی ارائه میشه اما نسخه develop اون چند وقتی میشه که در اختیار کاربران قرار گرفته در این دوره آموزشی سعی میکنیم که امکانات و...

دسترسی رایگان برای اعضای ویژه
آموزش پکیج نویسی لاراول

آموزش پکیج نویسی لاراول

اگر با لاراول و پکیج ها آشنا باشید مطمئنن میدانید که پکیج ها بخش مهمی در لاراول هستند و به برنامه نویسان و توسعه دهندگان لاراول کمک میکنند تا بتوانن ب...

دسترسی رایگان برای اعضای ویژه
آشنایی با امکانات جدید لاراول 5.2

آشنایی با امکانات جدید لاراول 5.2

لاراول 5.2 بزودی به طور رسمی ارائه میشه اما نسخه develop اون چند وقتی میشه که در اختیار کاربران قرار گرفته در این دوره آموزشی سعی میکنیم که امکانات و...

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
ali2173
3 ماه پیش

سلام ... ممنون از آموزشتون ... بسیار عالی بود
فقط من همون event و listener رو که برای ارسال ایمیل فعالسازی ساخته بودیم رو خواستم delay اعمال کنم... ابتدا تو env ، اومدم QUEUE_CONNECTION رو از sync به database تغییر دادم (تا بصورت job در جدول ذخیره بشه و ارسال بشه) بعد تو لیسینری که اسمشو گذاشته بودیم SendMailNotification ،در اونجا انتهای کد ارسال ایمیل، delay رو وارد کرده و Queueable رو use کرده و ShouldQueue را implement ...بعد آخر سر در cmd کامند queue:work رو به حالت اجرا گذاشتم ...اما وقتی این event اجرا میشه ... ایمل بلافاصله ارسال میشه و تاخیری درش روی نمیده!

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

اول اینکه php artisan serve رو دوباره اجرا کنید و بعد از اجرای event در زمانی که queue:work رو اجرا کردید هیچ لاگی اجرا نمیشه ؟

آفلاین
user-avatar
ali2173
3 ماه پیش

بله فرمایشتونو انجام دادم و php artisan serve رو دوباره اجرا کردم ولی همون شد.
چرا .. زمانیگه queue:work اجرا هست و event ارسال ایمیل فراخوانی میشه ، لاگ زیر رو نشون میده:

 [2020-05-08 20:22:26][33] Processing: App\Listeners\UserActivation\SendMailNotification
[2020-05-08 20:22:31][33] Processed:  App\Listeners\UserActivation\SendMailNotification
آفلاین
user-avatar
ali2173
3 ماه پیش

جناب موسوی مشکل حل شد
من مستندات سایت لاراول رو نگاه کردم ، نوشته بود اگه بخوایم برای یک لیسینر، queue رو اعمال کنیم و این لیسینر با delay اجرا شود، باید delay رو بصورت property تعریف کنیم ، مثلا برای تاخیر 60 ثانیه :

public $delay = 60

ولی تو این حالت دگ نباید تریت Queueable رو use کنیم

آفلاین
user-avatar
jaber
1 سال پیش

سلام اقا حسام
من تو قسمت اول که tries رو مشخص میکنیم مشکل خوردم و هرکار میکنم دستورش کار نمیکنه از قسمت terminal که اجرا میکنم مشکلی نداره و بعد چندبار اجرا faild میکنه اما اینکه بخوام تو job بهش بگم کار نمیکنه ، مستدات لاراولم دیدم دقیقا مثل توضیح شما پیش رفته بود چند بارم php artisan serv رو قطع و وصل کردم dumo-auto load هم زدم ولی نمیدونم مشکل از کجاس لاراول ۵.۸ هست

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام منظورتون از کار نمیکنه چیه
ارور دریافت میکنید ؟

آفلاین
user-avatar
jaber
1 سال پیش

ارور نمیداد و همه چی درست بود ولی تو دیتابیس هیچ رکوردی ثبت نمیشد ، در ورژن ۵.۸ تنها با وارد کردن $tries در job کار نمیکنه باید به جز job در کلاس UserActivationAccount هم $tries وارد بشه ممنون حل شد

آفلاین
user-avatar
heather
1 سال پیش

ببخشید که دوباره کامنت میدم ولی این ارور نمیزاره این ایمیل بیاد.حالا هر چی سرچ کردم جواب بدردبخوری نبود..همه می گفتن cache:clear,view:clear رو بزن منم زدم تغییری نکرد! یعنی قاطی کرده؟اخه اون emails.active-user.blade رو هم حذف کردم و واسه اطمینان همون مال شما رو کپی کردم باز هم همون شد

ErrorException (E_ERROR)
View [layouts] not found. (View: /home/heather/Desktop/syber/resources/views/vendor/mail/html/message.blade.php) (View: /home/heather/Desktop/syber/resources/views/vendor/mail/html/message.blade.php)
آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام فایل message.blade.php رو بررسی کنید . ببینید ایا جای layouts فراخونی شده توش

آفلاین
user-avatar
heather
1 سال پیش

سلام ممنون از جوابتون ...
بله داخل این فایل اولش همه چیز داخل کامپونت layouts هستش....من تغییری توش ایجاد نکردم ...حالا چی کار کنم؟

@component('layouts')
//all codes view
@endcomponent
آفلاین
user-avatar
حسام موسوی
1 سال پیش

همونطور که دارید میبینید نمیتونه layouts رو پیدا کنه ! درست آدرس دهی کنید باید از views/.. آدرس دهی کنید

آفلاین
user-avatar
heather
1 سال پیش

سلام ..
ببینید من از markdown استفاده کردم .داخل active-user.blade هم کامپونت mail::message که منظورش message.blade داخل /mail/markdown هستش رو لود می کنه .داخل اونم کامپونت layouts رو که منظورش mail/markdown/layouts.blade هستش. یا اگر نیستش و داخل mail/html/layouts.blade می خواد اون پیدا کنه :اون که وجود داره چرا می گه وجود نداره!من بارها چکش کردم اینقدر سرور رو رفرش کردم و اون کچ ها رو پاک کردم و composer dumpautoload زدم دستم درد گرفته!

آفلاین
user-avatar
heather
1 سال پیش

ممنون درست شد...کلا apache رو رستارت کردم.انگار گیر کرده بود یا چیزی...

آفلاین
user-avatar
heather
1 سال پیش

سلام خدمت شما اقای موسوی
من مراحل رو مثل شما پیاده کردم به غیر از این که یک کلاس mail دیگه درست کردم تا با اونای دیگه قاطی نشه. فقط هر کاری می کنم proccess جاب مورد نظر رو درست انجام میده ولی وقتی می خواد proccess مربوط به خود ایمیل رو انجام بده هر کاری کردم failed داد! رفتم لاگ اوت کردم mailtrap رو دوباره یک یوزر و پسوورد جدید گرفتم ولی نتیجه همون بود.تازه دیگه event مربوط به activationAcount هم ایمیلش ارسال نمیشه ! فقط تو ارسال ایمیل مشکل پیدا کرده!ارروری هم بهم نشون نمیده انگار قاطی کرده.
ممنون میشم بهم بگین چه کار کنم.

آفلاین
user-avatar
hamidsalehi
1 سال پیش

سلام، وقت بخیر.
هرکاری می‌کنم job ارسال ایمیل اجرا نمی‌شه و failed میشه.
همه چی رو clear می‌کنم، cache رو پاک می‌کنم بازنم نمیشه.

اینم پیغامش:

Illuminate\Contracts\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #1 [ <required> $code ]] in class App\Jobs\SendMail in D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php:960
Stack trace:
#0 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(898): Illuminate\Container\Container->unresolvablePrimitive(Object(ReflectionParameter))
#1 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(839): Illuminate\Container\Container->resolvePrimitive(Object(ReflectionParameter))
#2 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(807): Illuminate\Container\Container->resolveDependencies(Array)
#3 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(658): Illuminate\Container\Container->build('App\\Jobs\\SendMa...')
#4 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(609): Illuminate\Container\Container->resolve('App\\Jobs\\SendMa...', Array)
#5 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(759): Illuminate\Container\Container->make('App\\Jobs\\SendMa...', Array)
#6 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Events\CallQueuedListener.php(82): Illuminate\Foundation\Application->make('App\\Jobs\\SendMa...')
#7 [internal function]: Illuminate\Events\CallQueuedListener->handle(Object(Illuminate\Foundation\Application))
#8 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(29): call_user_func_array(Array, Array)
#9 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#10 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#11 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(572): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#12 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Bus\Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#13 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Events\CallQueuedListener))
#14 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Events\CallQueuedListener))
#15 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Bus\Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#16 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Events\CallQueuedListener), false)
#17 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\Jobs\Job.php(83): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob), Array)
#18 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(327): Illuminate\Queue\Jobs\Job->fire()
#19 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(277): Illuminate\Queue\Worker->process('database', Object(Illuminate\Queue\Jobs\DatabaseJob), Object(Illuminate\Queue\WorkerOptions))
#20 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(118): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\DatabaseJob), 'database', Object(Illuminate\Queue\WorkerOptions))
#21 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\Console\WorkCommand.php(102): Illuminate\Queue\Worker->daemon('database', 'default', Object(Illuminate\Queue\WorkerOptions))
#22 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Queue\Console\WorkCommand.php(86): Illuminate\Queue\Console\WorkCommand->runWorker('database', 'default')
#23 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
#24 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(29): call_user_func_array(Array, Array)
#25 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#26 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#27 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(572): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#28 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Console\Command.php(183): Illuminate\Container\Container->call(Array)
#29 D:\xampp\htdocs\chandvajhilaravel\vendor\symfony\console\Command\Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#30 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Console\Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#31 D:\xampp\htdocs\chandvajhilaravel\vendor\symfony\console\Application.php(908): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#32 D:\xampp\htdocs\chandvajhilaravel\vendor\symfony\console\Application.php(269): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#33 D:\xampp\htdocs\chandvajhilaravel\vendor\symfony\console\Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#34 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Console\Application.php(89): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#35 D:\xampp\htdocs\chandvajhilaravel\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(122): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#36 D:\xampp\htdocs\chandvajhilaravel\artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#37 {main}
آفلاین
user-avatar
حسام موسوی
1 سال پیش

اگر به ارور دقت کنید
در کلاس SendMail کد مربوطه ارسال نمیشه پس چک کنید که چرا اینطوریه

آفلاین
user-avatar
negin
2 سال پیش

حل شد ، از Mail بود که use شده بود داخل sendMail

آفلاین
user-avatar
negin
2 سال پیش

سلام آقای موسوی ، خسته نباشین
سرعت queue:work و queue:listen واسه من مث دوستمون آقا سجاد خیلی کمه ، قسمت تایمشو که نگاه کردم هر 7 ثانیه یه بار گوش میده دلیلشو نمیدونم از چیه لطفا راهنمایی کنین و اینکه آیا به نظرتون این که با سرعت نیست و هر چند ثانیه یه بار انجام میشه مزیت محصوب میشه یا عیب ؟
ممنون از وقتی که می ذارین ...

آفلاین
user-avatar
sajad yf
2 سال پیش

آقای موسوی سرعت work و listen دوناشون خیلی کمه . علتش چیه

آفلاین
user-avatar
حسام موسوی
2 سال پیش

یعنی چی سرعتشون کمه اونها گوش میدن هر زمانی task انجام شد پردازشش میکنن و این بستگی به سرعت پردازش اون task داره

آفلاین
user-avatar
pari.a
2 سال پیش

سلام آقای موسوی من تفاوت queue:work و queue:listen رو خوب متوجه نشدم.نمیدونم روی سیستمم از کدوم استفاده کنم.

آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام یکی ان تقریبا از queue:work استفاده کنید

آفلاین
user-avatar
MOHAMMAD .D
2 سال پیش

باعرض سلام و وقت بخیر
طبق مواردی که توضیح دادید وقتی شما صفحه رو رفرش کردید یک سطر به جدول Jobsاضافه شد ولی من هر کاری کردم اضافه نکرد
از لاراول 5.6 استفاده میکنم ولی هر چقدر سرچ کردم به نتیجه نرسیدم.
دقیقا مثل شما پیش رفتم ولی نمیدونم چرا هیچ سطری به دیتابیس اضافه نمیکنه
ممنون میشم راهنمایی کنید
تشکر.

آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام خوب مشخصه شما جای از کار رو اشتباه انجام دادید یکبار دیگه قدم به قدم چک کنید امکان نداره ما انجام بدیم بشه شما بدید همونکارا رو نشه یه چیزی رو یا جا انداختید یا انجام ندادید

آفلاین
user-avatar
parsa
2 سال پیش

سلام . corn job ها هم در این ویدیو هستند؟

آفلاین
user-avatar
حسام موسوی
2 سال پیش

منظورتون از cron job چیه
cron job رو که با استفاده از cpanel تعریف میکنید راحت چی داره که بخوایم بگیم ؟

آفلاین
user-avatar
parsa
2 سال پیش

من میخواستم یک تایمر داشته باشم و وقتی تایمر مثلا صفر شد ، یک عملیاتی سمت سرور انجام بشه ، برای همین نمیدونم چیکار کنم

آفلاین
user-avatar
حسام موسوی
2 سال پیش

استفاده ازش ساده است میتونید از ترکیب cronjob و schedule اینکارو انجام بدید

آفلاین
user-avatar
massoud
2 سال پیش

اینجور که متوجه شدم و تست کردم اگر برای کلاس میل implements ShouldQueue رو بزاریم باید حتما queue:work فعال باشه وگرنه هیچ ایمیلی پس از رجیستر ارسال نمیشه. ولی با برداشتن implements ShouldQueue بدون وجود queue:work ارسال اتفاق می افته.

در واقع اگر جایی از implements ShouldQueue استفاده کردیم باید حتما queue:work باشه و گرنه روند کارمون با مشکل مواجه میشه. درست متوجه شدم؟

آفلاین
user-avatar
حسام موسوی
2 سال پیش

برای استفاده از queue ها و اجرا کردنشون حتما باید queue:work اجرا شده باشه