Saya tahu menggunakan queues laravel karena saya mendapati gimana caranya program php berjalan secara asynchronous atau secara gampangnya program berjalan tanpa harus menunggu proses itu selesai, Karena saya sudah pernah belajar java dan javascript dimana disana sudah terbiasa, tapi saya waktu pakai php laravel gimana ya, sempet bingung dan tanya mbah google akhirnya ada stackoverflow menyarankan menggunakan queues, dan setelah saya coba ternyata fitur queues tidak hanya menjalankankan program dibelakang saja akan tetapi bisa menyimpan pekerjaan secara di database. Jadi ketika pekerjaan gagal bisa dikerjakan lagi. Langsung permasalahan yang bisa di selesaikan queues :
Bisa apa sih queues ?
- Menjalankan program dibelakang layar jadi tidak menunggu prosess lain.
- Menegemen untuk menjalankan program secara berurutan sehingga tidak berat ketika banya program yang berjalan secara bersamaan. Atau queues akan membuat antrian pekerjaan dimana bisa di set prioritasnya. Ini agak panjang si seharusnya penjelasannya tapi saya singkat aja.
- Menjalankan program lagi walau sudah gagal.
- Menyimpan parameter sekaligus jadi walau gagal tidak harus mengirim data parameter.
Mengetahui perintah queues pada artisan
queue:failed Daftar semua pekerjaan antrian yang gagal
queue:failed-table Membuat migrasi untuk tabel basis data pekerjaan antrian yang gagal
queue:flush Siram semua pekerjaan antrian yang gagal
queue:forget Hapus pekerjaan antrian yang gagal
queue:listen dengarkan Dengarkan antrian yang diberikan
queue:restart restart Restart daemon pekerja antrian setelah pekerjaan mereka saat ini
queue:retry coba lagi Coba lagi pekerjaan antrian yang gagal
queue:table Membuat migrasi untuk tabel database jobs queue
queue:work Mulai memproses pekerjaan pada queue sebagai daemon
Diatas saya coba dan saya kopi paste ke google translate, meniru atau mematuhi perintah dari Pak Onno.
Penerapan Fitur Queues
Pada penerapan ini menggunakan contoh kirim email, karena kalau kirim email di sarankan berjalan di belakang layar. Untuk penerapan ini harus ada perbedaan antara menggunakan queues dan tidak, saya sarankan untuk install laravel debugger karena agar ketahuan secara realnya berdasarkan data.
1. Buat kirim email tanpa queues
2. Bikin kirim email dengan queues dan bandingkan
3. Bikin error pada kirim email.
4. Bikin queues bisa kirim lagi kalau gagal
5. Pastikan queues bisa kirim lagi walau datanya berupa parameter.
Buat project laravel
- composer create-project –prefer-dist laravel/laravel belejar-email-queues-laravel
- setting .env
QUEUE_CONNECTION=database untuk version yang udah baru gak tau versinya berapa, kalau ada yang tau boleh komen. hehe
QUEUE_DRIVER=database untuk laravel versi lama, gak tau juga bareapa
jangan lup koneksi dengan database
jangan lupa seeting untuk mail smtp nya.
Saya pakai sendinblue sebagai provider untuk kirim email, bisa pakai sendgrid atau apa yang penting bisa kirim email - Install laravel debugbar
https://github.com/barryvdh/laravel-debugbar
1. composer require barryvdh/laravel-debugbar –dev
2. Tambahkan di config/app.php
Barryvdh\Debugbar\ServiceProvider::class,
‘Debugbar’ => Barryvdh\Debugbar\Facade::class,
php artisan vendor:publish –provider=”Barryvdh\Debugbar\ServiceProvider”
3. Pastikan laravel debugbar berhasil di install dengan muncul debugnya saat selesai load web. jangan gunakan respon json karena tidak akan muncul laravel debugbarnya php artisan queue:table
php artisan migrate
php artisan make:controller SendMailController
php artisan make:mail SendMail --markdown=emails.queues
php artisan make:job SendMailJob
Setting File
1. routes/web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('email', 'SendMailController@sendEmail');
Route::get('email-with-queues', 'SendMailController@sendEmailQueues');
2. app/Http/ Controllers/ SendMailController
public function sendEmail()
{
Mail::to('rohanisuhadi@rohanisuahdi.com')
->send(new SendMail());
echo "send mail";
}
public function sendEmailQueues()
{
$emailJob = (new SendMailJob());
dispatch($emailJob);
echo "send mail with queues";
}
3. app/Mail/SendMail
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Storage;
class SendMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
}
public function build()
{
return $this->markdown('emails.queues');
}
}
4. app/Jobs/SendMailJob
<?php
namespace App\Jobs;
use App\Mail\SendMail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class SendMailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
//
}
public function handle()
{
Mail::to('rohanisuhadi94@gmail.com')
->send(new SendMail());
}
}
Ada dua router web satu kirim email tanpa menggunakan queues dan satu menggunakan queues maka akan ada kesimpulan.
untuk bisa melihat apakah queues berjalan bisa menggunakan perintah dibawah ini
php artisan serve
Buka lagi terminal baru dan jalankan perintah dibawah
php artisan queue:listen
Buat untuk ketika queues gagal maka bisa jalankan lagi
php artisan queue:failed-table
php artisan migrate
Kita harus bikin email tidak terkirim dengan cara membuat error. Sebagai contoh saya mengedit untuk format email menjadi seperti ini
resources/views/emails/queues.blade.php
@component('mail::message')
# Introduction
The body of your message.
@component('mail::button', ['url' => ''])
Button Text
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
menjadi, dengan manmbahkan parameter untuk nama lengkap.
karena data tidak dikirim dari email kemungkinan akan error
@component('mail::message')
# Introduction
The body of your message.
@component('mail::button', ['url' => ''])
{{ $nama_lengkap }}
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
pastiken restart queues dengan perintah
php artisan queue:restart
php artisan queue:work
Akan muncul seperti gambar dibawah ini ya gaes
Untuk memperbaikinya bisa dengan cara mengembalikan file resources/views/emails/queues.blade.php ini seperti semula dan restart queues dengan perintah
php artisan queue:restart
php artisan queue:work
Buka terminal satu lagi untuk perintah mengulang queues yang gagal dengan cara
php artisan queue:retry all
retry all untuk menjalankan perintah queues yang gagal semua
Bukti untuk gambar sudah melakukan penujian saya tampilkan dibawah karena saya tidak mau file image di simpan di vps saya sehingga saya harus setting s3 saya agar disimpan si s3nya.




Untuk git bisa download disini