Tutorial Message Broker Menggunakan RabbitMQ Pada Laravel - CRUDPRO

Tutorial Message Broker Menggunakan RabbitMQ Pada Laravel

Pertama, masukkan perintah untuk membuat proyek Laravel baru pada command anda

composer create-project --prefer-dist laravel/laravel laravel-rabbitmq

Lalu buka folder laravel-rabbitmq dan jalankan

composer require vladimir-yuldashev/laravel-queue-rabbitmq

Kemudian buka file `app/config/queue.php` dan tambahkan konfigurasi driver rabbitmq ke file tersebut.

'connections' => [
// ...
	'rabbitmq' => [
		'driver' => 'rabbitmq',
		'queue' => env('RABBITMQ_QUEUE', 'default'),
		'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
		'hosts' => [
			[
				'host' => env('RABBITMQ_HOST', '127.0.0.1'),
				'port' => env('RABBITMQ_PORT', 5672),
				'user' => env('RABBITMQ_USER', 'guest'),
				'password' => env('RABBITMQ_PASSWORD', 'guest'),
				'vhost' => env('RABBITMQ_VHOST', '/'),
			],
		],
		'options' => [
			'ssl_options' => [
				'cafile' => env('RABBITMQ_SSL_CAFILE', null),
				'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
				'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
				'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
				'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
			],
		],
		/*
		* Set to "horizon" if you wish to use Laravel Horizon.
		*/
		'worker' => env('RABBITMQ_WORKER', 'default'),
	],
// ...    
],

Langkah selanjutnya adalah menginstal RabbitMq. Untuk instalasi, silakan kunjungi halaman berikutnya https://www.rabbitmq.com/download.html. Kali ini, gunakan docker untuk menginstal rabbitmq secara lokal, lalu jalankan perintah berikut:

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

>Kemudian gunakan kode berikut untuk membuat template email SendMailTemplate.php di app/Mail/SendMailTemplate.php.

<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SendMailTemplate extends Mailable
{
	use Queueable, SerializesModels;
	/**
	* The content instance.
	*
	* @var content
	*/
	protected $content;
	public function __construct($content)
	{
		$this->content = $content;
	}
	/**
	* Build the message.
	*
	* @return $this
	*/
	public function build()
	{
		return $this->view('templateEmail')
		->with([
		'content' => $this->content
		]);
	}
}

Kemudian buat view bernama `templateEmail.blade.php` di folder `resources/views`. Masukkan sebagai berikut.

{{ $content }}

Selanjutnya, buat `MailController.php` di folder `app/Http/Controllers` dengan nama `MailController.php`.

<?php
namespace App\Http\Controllers;
use App\Mail\SendMailTemplate;
use Illuminate\Support\Facades\Mail;
class MailController extends Controller
{
	public function sendEmail()
	{
		$email = request("email");
		Mail::to($email)->send(new SendMailTemplate("Halo"));
	}
	public function sendEmailQueue()
	{
		$email = request("email");
		Mail::to($email)->queue(new SendMailTemplate("Halo"));
	}
}

Tambahkan ke file `route/web.php`. Rute teratas adalah mengirim email secara sinkron tanpa menggunakan perantara pesan, sedangkan rute bawah menggunakan perantara pesan dengan driver antrian yang dikonfigurasi di rabbitmq.

Route::post('/mail', 'MailController@sendEmail');
Route::post('/mail-queue', 'MailController@sendEmailQueue');

Kemudian atur file .env di bagian konfigurasi MAIL dan sesuaikan untuk server email Anda. Saat ini saya menggunakan smtp gmail. Konfigurasinya adalah sebagai berikut:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=GMAIL KAMU
MAIL_PASSWORD=PASSWORD GMAIL KAMU
MAIL_ENCRYPTION=ssl

Kemudian jalankan `php artisan serve`. Jalankan juga `php artisan queue:work`

Kemudian kita buka postman untuk mengetest kedua route tersebut.

Tampaknya ada perbedaan besar antara posting pertama dan posting kedua karena posting kedua menggunakan antrian karena proses pengiriman email paralel. Oleh karena itu, saat Anda mengajukan permintaan, email mungkin tidak selalu berhasil dikirim, bahkan setelah Anda menerima balasannya.

Ini adalah artikel tentang menerapkan broker pesan menggunakan RabbitMq dan Laravel.