Mode Kerja RabbitMQ PHP
Mode kerja dalam RabbitMQ melibatkan konfigurasi beberapa pengonsumsi untuk memproses pesan dari antrian yang sama, yang dapat meningkatkan kecepatan pemrosesan bersamaan pesan. Arsitekturnya ditunjukkan dalam diagram berikut:
Catatan: Terlepas dari mode kerja RabbitMQ yang digunakan, setiap antrian mendukung beberapa pengonsumsi, dan pesan dalam antrian yang sama hanya akan diproses oleh salah satu pengonsumsi.
1. Tutorial Prasyarat
Silakan baca bagian-bagian berikut untuk memahami pengetahuan terkait:
- Konsep Inti RabbitMQ
- Mode Kerja RabbitMQ
- Pemulaan Cepat untuk PHP di RabbitMQ (Harus dibaca, karena bagian-bagian selanjutnya tidak akan menduplikasi kode, hanya menunjukkan kode kunci)
2. Mengimplementasikan Beberapa Pengonsumsi dalam PHP
PHP sendiri tidak mendukung teknologi bersamaan seperti multithreading and korutin, sehingga umumnya menggunakan multiproses untuk mencapai pemrosesan bersamaan. Di sini, kita menggunakan mode multiproses untuk mengimplementasikan pemrosesan bersamaan pengonsumsi dalam antrian.
2.1. Memulai Beberapa Proses Secara Manual
Untuk mengimplementasikan beberapa proses, cara paling sederhana adalah dengan menjalankan perintah PHP secara manual beberapa kali.
Contoh:
Diasumsikan skrip pengonsumsi dari bagian sebelumnya adalah recv.php
, kita dapat membuka beberapa jendela shell dan menjalankan skrip pengonsumsi secara berulang seperti ini:
php recv.php
php recv.php
Atau dalam jendela shell yang sama, masukkan skrip ke latar belakang untuk dijalankan seperti ini:
php recv.php &
php recv.php &
Penjelasan: Kerugian dari mengimplementasikan beberapa pengonsumsi secara manual seperti ini adalah bahwa proses tidak terawat dengan baik, tanpa pemantauan proses. Jika sebuah proses mengalami kegagalan, itu tidak akan dijalankan kembali secara otomatis.
2.2. Menggunakan Supervisor untuk Mengimplementasikan Beberapa Proses
Supervisor adalah pemantau proses dalam sistem operasi Linux, yang dapat memantau proses PHP. Jika sebuah proses PHP mengalami kegagalan, itu akan dijalankan kembali secara otomatis. Ini juga dapat mengonfigurasi konkurensi proses, mempermudah pemrosesan bersamaan dari beberapa pengonsumsi.
Berikut adalah contoh menggunakan Ubuntu, serupa untuk distribusi Linux lainnya.
Memasang Supervisor
sudo apt-get install supervisor
Mengonfigurasi Supervisor
File konfigurasi untuk Supervisor biasanya terletak di direktori /etc/supervisor/conf.d. Di direktori ini, Anda dapat membuat sejumlah file konfigurasi untuk memberi tahu Supervisor cara memantau proses-proses kami. Sebagai contoh, buat file rabbitmq-worker.conf
untuk memantau proses pengonsumsi kami.
Contoh: File: rabbitmq-worker.conf
[program:rabbitmq-worker]
process_name=%(program_name)s_%(process_num)02d
command=php recv.php
autostart=true
autorestart=true
user=root
numprocs=10
redirect_stderr=true
stdout_logfile=/var/log/worker.log
Penjelasan parameter:
- process_name: Definisi nama proses, dapat dinamai secara sembarangan. Di sini, digunakan dua variabel:
program_name
(nama proses) danprocess_num
(nomor proses). - command: Perintah yang perlu kita jalankan.
- autostart: Apakah akan dimulai otomatis saat boot.
- autorestart: Apakah akan dijalankan kembali secara otomatis.
- user: Akun sistem untuk menjalankan perintah.
- numprocs: Jumlah proses bersamaan, menunjukkan berapa banyak proses yang akan dijalankan.
- stdout_logfile: Tempat file log berjalan disimpan.