Implementasi Microservices dengan Laravel Events akan kita bahas pada kesempatan kali ini. Pada kesempatan ini penulis baru saja selesai memindahkan / memecah beberapa bagian program pada GuestPro Cloud PMS menjadi bagian terpisah. ingin tahu lebih lanjut? mari kita bahas.
Introduction
Microservices adalah sebuah arsitektur aplikasi yang mengusung kosep service oriented architecture (SOA) dimana terdapat kumpulan proses independen dan kecil yang berkomunikasi antara satu dengan lainnya untuk membentuk aplikasi kompleks yang agnostik terhadap bahasa API apa pun. Servis-servis ini terdiri dari blok-blok kecil, terpisah, dan fokus pada tugas-tugas ringan untuk memfasilitasi metode modular dalam pembangunan sistem.
Laravel Events merupakan fitur dari laravel yang dapat kita gunakan untuk membangun sebuah arsitektur microservices pada aplikasi kita. Laravel events merupakan fitur laravel yang akan kita gunakan untuk men-subscribe / listen sebuah events dalam aplikasi kita. semisal sebuah event register new user dijalankan, kita akan mengirim email pada user tersebut. nah job mengirim email ini akan dijalankan oleh listener dari events kita. listener bisa langsung menjalankan job terebut atau memasukkannya pada laravel Queues.
Laravel Queues merupakan fitur queue yang ada pada laravel, saat ini laravel queues telah mensupport berbagai jenis queue system mulai dari database, redis, hingga AmazonSQS. dengan laravel queues ini kita bisa mengurangi proses yang memakan waktu proses lama pada aplikasi kita, dengan memasukkan proses itu dalam queue dan menjalankanya pada background system atau dijalankan oleh modul lain pada server lain. contoh proses yang biasanya dimasukkan ke queue diantaranya mengirim email register, re-kalkulasi inventory dan lainnya.
Goal
Pada tutorial ini kita akan membuat sebuah events listener untuk event new user register, dimana ketika event ini dijalankan kita akan mengirimkan sebuah email kepada user, dimana email ini akan dikirim secara background.
Membuat Events / Listeners
Pertama kita akan membuat events dan listeners, berikut merupakan langkah – langkahnya:
Mendaftarkan Events dan Listeners
Untuk mendaftarkan events dan listeners kita harus mendaftarkannya pada array listener pada file app\Providers\EventServiceProvider.php disini kita akan mendaftarkan sebuah Events ‘NewUserRegistered’ dan sebuah listener ‘EmailRegisteredUser’ seperti berikut :
1 2 3 4 5 6 7 8 9 10 |
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ 'App\Events\NewUserRegistered' => [ 'App\Listeners\EmailRegisteredUser', ], ]; |
Membuat class Events dan Listeners
Untuk membuat class events dan listeners kita cukup meng-generatenya secara otomatis dengan bantuan php artisan, sebagai berikut :
1 |
php artisan event:generate |
selanjutnya akan muncul 1 buah class event app\Events\NewUserRegistered.php dan 1 buah class listener app\Listeners\EmailRegisteredUser.php
Membuat Events
Sebuah class events merupakan class yang digunakan untuk menerima data dari sebuah events, pada tutorial ini kita akan menerima sebuah alamat email ketika event NewUserRegistered di jalankan. sebagai berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class NewUserRegistered extends Event { use SerializesModels; public $email; /** * Create a new event instance. * * @return void */ public function __construct($email) { // $this->email = $email; } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } } |
dari potongan kode diatas kita menerima data $email dari constructor class NewUserRegistered.
Membuat Listeners
Class listeners merupakan class yang nantinya akan menerima data dari events. events listeners akan menerima instans dari events secara default pada method handle . berikut merupakan koden untuk listener kita :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php namespace App\Listeners; use App\Events\NewUserRegistered; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class EmailRegisteredUser { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param NewUserRegistered $event * @return void */ public function handle(NewUserRegistered $event) { // echo "kirim email ke : ".$event->email; } } |
Testing via Browser menggunakan route.php
Dalam tutorial ini karena tujuan kita untuk membuat events listeners kita bisa melakukan testing apakah events listeners yang kita buat tadi bisa berjalan dengan benar atau tidak, untuk mempermudah testing kita akan menggunakan browser dan langsung membuat route pada route.php laravel kita, sebagai berikut:
1 2 3 4 5 6 7 |
<?php use App\Events\NewUserRegistered; Route::get('register', function () { event(new NewUserRegistered('info@dicloud.id')); }); |
selanjutnya kita tinggal akses via browser :
Kita bisa saja menempelkan events ini pada potongan kode ‘event(new NewUserRegistered(‘info@dicloud.id’));‘ pada kode registrasi user kita.
Kesimulan
Laravel Events Listeners merupakan tahap awal kita untuk membangun sebuah aplikasi microservices, sampai disini kita sudah belajar mendaftarkan events listener pada provider events laravel, selanjutnya membuat class events dan listeners sesuai kebutuhan kita. kedepannya kita bisa memecah proses – proses dari aplikasi menjadi blok-blok kecil, terpisah, dan fokus pada tugas-tugas ringan pada sistem.
Selanjutnya
sampai disini kita sudah berhasil membuat events listener, namun listeners yang kita buat masih dijalankan langsung oleh aplikasi kita, untuk mendukuk konsep microservices kita akan memasukkan job dari listeners ke dalam queue dan dijalankan oleh server lain.
Programmer juga nyambi di bidang system dan infrastuktur. Berpengalaman sebagai System Engineer sejak tahun 2013. Selama beberapa tahun terakhir bekerja di salah satu Bank BUMN.