Pengalaman Queue dengan Laravel, Supervisor dan Beanstalk di Server Ubuntu

Awalnya Queue ini ingin saya terapkan jika ingin mengirim email atau mengirim sms dengan sms gateway berbayar seperti zenziva. Kenapa harus menggunakan Queue? jika yang sudah pengalaman mengirim email pada kode PHP kita pasti akan merasakan beberapa detik untuk mengirimkan email. Nah detik yang mubadzir itu jika ada 1 orang saja mungkin tidak masalah. Bagaimana jika yang melakukannya ada 100 orang? atau mungkin 1000 orang per menit? atau per detik?

Dengan adanya Queue, proses tersebut diantrikan. Seperti contoh ketika mendaftar pada website kita. Kita kirim email lalu mungkin sms pemberitahuan. Proses mendaftarnya langsung diproses sedangkan pengiriman email dan sms di queue saja agar proses lebih cepat.

Laravel uniknya sudah menyiapkan fitur ini bisa lihat di documentasinya disini [https://laravel.com/docs/5.4/queues].

Untuk awal, saya coba queue dengan database, saya jalankan step by step proses dan berhasil. Baca-baca artikel untuk menjalankan queue live lebih baik menggunakan Supervisor. Supervisor sendiri seperti daemon yang berjalan dibelakang secara continue. Pada documentasi Larael queue dijelaskan juga cara memasangnya. Saya coba dan sepertinya berjalan baik-baik saja.

Baca-baca kembali jika queue dengan database kurang efektif karena queue dengan database bolak balik baca table. Penasaran liat performa saya coba pakai redis. Saya install di server ubuntu dan ketemu banyak masalah yang sampai penulisan artikel ini belum ketemu (mudah-mudahan nanti ketemu). Akhirnya saya coba alternative lain, saya coba pakai Beanstalk.

Install Beanstalk, install php client library di Laravel. Dan sempet jalan sekali dua kali. Beberapa kali coba kembali, proses gak jalan. Lihat laravel.log, ada banyak error yang muncul dan anehnya bertambah terus. laravel.log semakin membengkak karena ada error yang tertulis. Kesel saya coba menghentikan supervisor dan beanstalk nya. Saya stop service nya. Tapi tetep aja nambah terus di error laravel.log.

Error yang tertulis di laravel.log itu tertuliskan bahwa saya belum pasang default queue di .env. Padahal sudah dituliskan beanstalkd sebagai default. Namun error masih aja muncul.

Penasaran, saya coba tanpa supervisor dan langsung jalankan php artisan queue:work namun tidak jalan juga. Error masih saja nulis log nya. Saya coba ganti .env untuk menggunakan database saja. Tapi tetep error masih saja tertulis di log dan proses queue gagal dijalankan. Saya sempet coba down-kan si Laravel dgn php artisan down, lalu saya up kembali. Eh error masih muncul juga.

2 hari coba-coba akhirnya saya paksa si server untuk di restart. Mungkin bukan cara yang baik tapi penasaran karena mungkin ada service yang jalan di server ubuntu. Entah si beanstalk-nya atau mungkin si supervisor nya. Setelah di restart, lalu jalankan satu per satu service yang digunakan.

Saya coba dari awal kembali, saya pasang Queue Laravel dengan database. Saya coba jalankan tanpa supervisor dan alhamdulillah berjalan :D. Oke saya coba jalankan service supervisor dan setting .conf nya. Alhamdulillah berjalan sesuai harapan dengan bantuan supervisor.

Ada beberapa pembelajaran disini. Jika ada jobs item di table jobs yang belum berhasil dijalankan maka akan selalu dipanggil sampai jobs tersebut selesai dijalankan. Jadi mesti lihat apa ada jobs yang sedang dan belum dijalankan. Enaknya jika pakai queue database itu terlihat di table. Kalau pakai beanstalk saya belum ketemu tool untuk melihat queue yang sedang atau akan berjalan.

Alhasil, proses queue berjalan walaupun masih menggunakan database. Seengga-nya jalan dulu sampai nanti ada banyak yang menggunakan aplikasi baru ditingkatkan prosesnya.

Bacaan tentang Laravel Queue, Supervisor lainnya:
https://toniperic.com/2015/12/01/laravel-queues-demystified

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: