Implementasi Queue Di Laravel Framework
Perusahaan mungkin mengalami banyak tantangan saat mengelola layanan atau aplikasi mereka. Misalnya, perusahaan mungkin perlu mengirim email ke jutaan pengguna atau melakukan backup database. Semua operasi ini membutuhkan daya komputasi yang besar.
Menjalankan semua layanan ini sekaligus dapat memengaruhi kinerja aplikasi. Akibatnya, pengguna mungkin menjadi frustrasi karena penundaan yang lama. Laravel berusaha menyelesaikan masalah ini melalui penggunaan antrian.
Prasyarat
Untuk mengikuti, Anda harus menginstal Laravel 8 di komputer Anda. Memiliki pengetahuan tentang PHP dan Laravel juga penting. Komponen Laravel utama yang akan digunakan dalam proyek ini adalah Mail dan Jobs.
Tujuan
Pada akhir tutorial ini, Anda seharusnya dapat meningkatkan kinerja aplikasi Anda dengan menunda menjalankan layanan tertentu.
Apa itu antrian Laravel
Sebuah antrian melibatkan menempatkan hal-hal dalam rangka. Misalnya, sistem manajemen antrian dapat digunakan untuk melayani pelanggan dengan basis first-come-first-serve.
Ini tidak berbeda dengan antrian Laravel. Ini melayani pekerjaan yang sama dengan memastikan bahwa program atau layanan dijalankan dalam urutan tertentu.
Misalnya, Anda memiliki aplikasi yang mengharuskan pengguna untuk mendaftar dan kemudian mengirimi mereka One-Time-Password (OTP) atau bahkan email selamat datang. Meskipun ini adalah implementasi yang bagus, ini dapat memperlambat kinerja aplikasi. Antrian Laravel dapat membantu menyelamatkan situasi ini.
Mari kita mulai.
Mengonfigurasi antrian Laravel
Laravel menyediakan beberapa driver yang dapat kita gunakan untuk mengkonfigurasi antrian kita. Dalam tutorial ini, kita akan menggunakan driver database.
Dalam proyek ini, kami akan fokus pada pengiriman email menggunakan antrian Laravel.
Mulailah dengan menjalankan perintah berikut:
php artisan queue:table
Output:
Migration created successfully!
Perintah di atas mengatur aplikasi kita untuk menggunakan driver database
untuk mengimplementasikan antrian. Itu juga membuat file migrasi
dan tabel pekerjaan kami.
Ini file migrasi kami:
class CreateJobsTable extends Migration{
// this method will create a database called jobs with its respective columns
public function up(){
Schema::create('jobs', function (Blueprint $table) { //we define our database columns here
$table->bigIncrements('id');
$table->string('queue')->index();
$table->longText('payload');
$table->unsignedTinyInteger('attempts');
$table->unsignedInteger('reserved_at')->nullable();
$table->unsignedInteger('available_at');
$table->unsignedInteger('created_at');
});
}
// this method is used to check if the table already exists
public function down(){
Schema::dropIfExists('jobs');
}
}
Kami juga perlu memberi tahu Laravel bahwa kami akan menggunakan driver database dengan memperbarui file .env
sebagai berikut:
QUEUE_CONNECTION=database
Dengan tabel pekerjaan kami siap, kami sekarang dapat menjalankan migrasi
seperti yang ditunjukkan di bawah ini:
php artisan migrate
Sebelum menjalankan perintah migrasi di atas, pastikan file .env Anda memiliki kredensial database yang benar untuk menghindari kesalahan.
Output:
Migration table created successfully.
--------
Migrating: 2021_06_22_123248_create_jobs_table
Migrated: 2021_06_22_123248_create_jobs_table (117.97ms)
Menyiapkan email untuk menggunakan antrian Laravel
Di bagian ini, kita akan menggunakan kelas mailable
untuk mengatur email kita.
Mari kita mulai dengan menjalankan perintah berikut:
php artisan make: mail TestHelloEmail
Output:
Mail created successfully.
Perintah di atas membuat file TestHelloMail.php
di dalam direktori ./app/Mail
.
Berikut adalah isi dari file TestHelloMail.php
:
<?php
class TestHelloEmail extends Mailable{
use Queueable, SerializesModels;
public function __construct(){
//
}
public function build(){
return $this->view('view.name'); // returns a view to the user
}
}
Karena kita telah membuat kelas mailable
kita, navigasikan ke folder resources/views
dan buat direktori baru bernama mail
.
Di dalam folder ini, buat file baru dan beri nama testEmails.blade.php
.
Sertakan baris HTML berikut dalam file testEmails.blade.php
.
<p> My mailing queues testing</p>
Sekarang, mari kita perbarui file TestHelloEmail.php
, seperti yang ditunjukkan di bawah ini:
public function build(){
return $this->view('view.mail.testEmails');
}
Langkah selanjutnya adalah membuat pekerjaan untuk mengelola email kita.
Di sini kita dapat menggunakan perintah berikut:
php artisan make:job TestSendEmail
Output:
Job created successfully.
Perintah di atas akan membuat file testSendEmail.php
di dalam folder app/jobs/
.
Mari kita perbarui isinya sebagai berikut:
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
class TestSendEmail implements ShouldQueue{
public function __construct(){
//
}
public function handle(){
$email = new TestHelloEmail();
Mail::to('[email protected]')->send($email);
}
}
Dalam file testSendEmail.php
di atas, kita mengimpor fasad Mail
dan kelas TestHelloEmail.php
untuk mengimplementasikan antrian Laravel.
Menguji email
Pada langkah ini, kita perlu menambahkan pengontrol
untuk menangani logika kita.
Untuk melakukannya, kami menggunakan perintah berikut:
php artisan make:controller TestQueueEmails
Output:
Controller created successfully.
Buka pengontrol yang dihasilkan dan edit sebagai berikut:
class TestQueueEmails extends Controller
{
/**
* test email queues
**/
public function sendTestEmails()
{
$emailJobs = new TestSendEmail();
$this->dispatch($emailJobs);
}
}
Kemudian tambahkan yang berikut ini di file rute
Anda:
Saat Anda menavigasi ke http://localhost:8000/sending-queue-emails
, Anda akan melihat pekerjaan telah ditambahkan di tabel pekerjaan.
Ketika kami ingin mengirimkan pekerjaan, kami menggunakan perintah berikut:
php artisan queue: work
Kesimpulan
Dalam tutorial ini, kita telah membahas proses implementasi antrian Laravel menggunakan pengirim email sederhana. Antrian Laravel dapat membantu pengembang meningkatkan kepuasan pengguna dengan menjalankan layanan kompleks hanya saat aplikasi tidak digunakan.
Anda dapat menggunakan pengetahuan ini untuk membuat aplikasi yang lebih kuat.
Selamat mengkode!