İçeriğe geç

Laravel Jobs & Queue Nedir ve Nasıl Kullanılır

Uzun süre olan işlemler ziyaretçileri rahatsız edebilir veya işlem sürerken yarıda kesilebilir. Bu tür durum ve sorunların kontrolü için Laravel Jobs & Queue kullanmak avantajlıdır. Yapacağınız işlemler kayıt edilir ve belirteceğiniz zamanda bu işlem arkaplanda çalıştırılır. Örnek verecek olursak tüm üyelerinize toplu mail gönderirseniz bu işlem uzun sürecek, süreci takip edemez sadece tarayıcının işlemi bitmesini beklersiniz. Ayrıca mail gitmeyen kullanıcıları da göremezsiniz. Bu işlemi Laravel Jobs & Queue kullanarak rahatlıkla gerçekleştirebilirsiniz.

Mantık olarak ise şu şekilde süreç işliyor. Öncelikle yapacağınız işlem için Job oluşturulur.

php artisan make:job SendMyTestEmailJob

app\Jobs\SendMyTestEmail.php dosyasındaki handle metoduna yapacağınız işlem tanımlanır.

use Mail;
use App\Mail\MyTestMail; // deneme mail sınıfı
...
$to_email = 'info@example.com';
$details = [
	'title' => 'Mail from controller basligi',
	'body' => 'This is for testing email using smtp'
];
Mail::to($to_email)->send(new MyTestMail($details));

Bu test maili Job işlemini nerede çalıştırmak isterseniz orada dispatch etmeniz gerekiyor. Örneğin TopluMailGondeController.php dosyamız var ise;

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Jobs\SendMyTestEmailJob;
class TopluMailGonderController extends Controller
{
    /**
     * Handle Queue Process
     */
    public function sendBulkEmail()
    {
        $emailJob = new SendMyTestEmailJob();
        dispatch($emailJob);
        // veya 
        // use App\Jobs\SendMyTestEmailJob;
        SendMyTestEmail::dispatch($emailJob);
    }
}

Queue ve jobs için tabloları oluşturmak için;

php artisan queue:table // (database/migrations CreateJobsTable için dosya oluşur)
php artisan migrate

Ayrıca localde kullanılacaksa aşağıdaki komutları kullanmalısınız. Böylelikle Joblar sırayla arkaplanda çalıştırılır.

php artisan queue:work //job işlemi veri tabanından  çalışır
php artisan queue:work --once //işlemler 1 kere tetiklenir
php artisan queue:listen --tries=3 // jobları 3 kere çalıştırma
php artisan queue:failed  // basarisiz jobları listeler
php artisan queue:retry job_id // basarisiz jobu tekrar sıraya koyar

Sunucu ise supervisor kurmanız gerekmektedir.

Job işlemini belirli bir süre sonra da çalıştırabilirsiniz.

use Carbon\Carbon;

public function processQueue()
    {
        $emailJob = new SendWelcomeEmail()->delay(Carbon::now()->addMinutes(5));
        dispatch($emailJob);
    }
// veya
SendCouponEmail::dispatch()
                ->delay(now()->addSeconds(20));
// veya
ProcessPodcast::dispatch($podcast)
                ->delay(now()->addMinutes(10));

*Zincirleme metodu kullanılarak başarısız Job işleminden sonra kuyruktaki işlemleri durdurabilirsiniz. Örnek kullanım.

use App\Jobs\OptimizePodcast;
use App\Jobs\ProcessPodcast;
use App\Jobs\ReleasePodcast;
use Illuminate\Support\Facades\Bus;
Bus::chain([
    new ProcessPodcast,
    new OptimizePodcast,
    new ReleasePodcast,
])->dispatch();

App\Jobs\SendMail::withChain([
    new IkinciBirIs,
    new UcuncuBirIs,
])->dispatch()
Kategori:LaravelLaravel Advanced

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.