5 Ağustos '22 1 hafta önce
3 dk 403 kelime
Bu makale ben (Yunus Emre Deligöz) ve Turan Karatuğ tarafından yazılmıştır. İngilizce dilinde ve ayrıca Medium üzerinde okunabilir.
Uzun Lafın Kısası
Dispatch komutundan hemen sonra, sadece, ;1
eklemeniz yeterli.
SendEmailJob::dispatch();1;
Laravel Tinker üzerinden Job’ları Dispatch Etmek
Laravel Artisan Tinker üzerinde kuyruğa bir Job göndermek istiyorsanız, Tinker'ı açıp şöyle yazarsınız:
SendEmailJob::dispatch();
Ve Job'un aslında kuyruğa gönderilmediğini farkedersiniz. Komutu yeniden çalıştırırsanız aynı yanıtı görürsünüz ancak Job kuyruğa yalnızca bir kez gönderilmiştir.
Laravel Tinker Job’u neden ilk seferde dispatch etmedi?
Buradaki sorun Laravel Tinker'in oluşturulan PendingDispatch
nesnelerini kullanıcının sonraki komutlarda kullanması için bellekte tutmasıdır. PendingDispatch
nesnesi yok edildiğinde Job dispatch edilir.
Bu konudaki tartışmalar için Laravel Tinker Repo'suna göz atabilirsiniz.
Çözüm
Bu problemi en doğru şekilde çözmek için Job'u Laravel'in Dispatcher
sınıfı üzerinden gönderebilirsiniz:
app(\Illuminate\Contracts\Bus\Dispatcher::class)
->dispatch(new SendEmailJob());
Hızlıca çözmek içinse:
SendEmailJob::dispatch();1
Komutun sonuna ;1
eklediğinizde, Tinker PendingDispatch
nesnelerini bellekte tutmayacak ve bu da Job'ların hemen dispatch edilmesini sağlayacaktır.