PHP RabbitMQ Çalışma Modu

RabbitMQ'da Çalışma modu, aynı kuyruktan mesajları işlemek üzere yapılandırılmış birden çok tüketiciyi yapılandırmayı içerir, bu da mesajların eşzamanlı işlenme hızını artırabilir. Mimarisi aşağıdaki diyagramda gösterilmiştir:

RabbitMQ Çalışma Modu

Not: Kullanılan RabbitMQ çalışma modundan bağımsız olarak, her kuyruk birden çok tüketiciyi destekler ve aynı kuyruktaki bir mesaj sadece tüketiciyi tarafından işlenir.

1. Ön Koşul Eğitimi

Lütfen ilgili bilgileri anlamanız için aşağıdaki bölümleri okuyun:

2. PHP'de Birden Çok Tüketici Uygulamak

PHP kendisi çoklu iş parçacığı ve işlemler gibi eşzamanlı teknolojileri desteklemez, bu nedenle genellikle eşzamanlı işleme ulaşmak için çoklu işlemeler kullanılır. Burada, kuyruktaki mesajları eşzamanlı olarak işleyen çoklu tüketici uygulamak için çoklu işlem modunu kullanıyoruz.

2.1. Manuel Olarak Birden Çok Süreci Başlatma

Birden çok işlemeyi uygulamanın en basit yolu, PHP komutunu manuel olarak birden çok kez çalıştırmaktır.

Örneğin: Önceki bölümdeki tüketici betiği recv.php varsayalım, çoklu kabuk penceresi açarak ve tüketici betiğini tekrar tekrar çalıştırarak şöyle yapabiliriz:

php recv.php

php recv.php

Veya aynı kabuk penceresinde, betiği arka planda çalıştırmak için şöyle yapabiliriz:

php recv.php &
php recv.php &

Açıklama: Bu manuel yol ile birden çok tüketiciyi uygulamanın dezavantajı, süreçlerin iyi yönetilmemesi, süreç izleme olmamasıdır. Bir süreç çökerse, otomatik olarak yeniden başlatılmayacaktır.

2.2. Birden Fazla Süreci Uygulamak İçin Supervisor Kullanma

Supervisor, Linux işletim sisteminde süreç izleyicisidir ve PHP süreçlerini izleyebilir. Bir PHP süreci çökerse, otomatik olarak yeniden başlatılır. Süreçlerin eşzamanlı işlenmesini kolaylaştırmak için süreç eşzamanlılığını yapılandırabilir.

Ubuntu'da kullanım örneği şöyle:

Supervisor'ün Kurulumu

sudo apt-get install supervisor

Supervisor'ü Yapılandırma

Supervisor'ün yapılandırma dosyası genellikle /etc/supervisor/conf.d dizininde bulunur. Bu dizinde, süreçlerimizi nasıl izleyeceğini Supervisor'a anlatmak için istediğiniz sayıda yapılandırma dosyası oluşturabilirsiniz. Örneğin, tüketici süreçlerimizi izlemek için rabbitmq-worker.conf adında bir dosya oluşturun.

Örnek: Dosya: 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

Parametrelerin açıklaması:

  • process_name: Süreç adının tanımı, isteğe bağlı olarak adlandırılabilir. Burada, program_name (süreç adı) ve process_num (süreç numarası) olmak üzere iki değişken kullanılmıştır.
  • command: Çalıştırmamız gereken komut.
  • autostart: Otomatik olarak başlatıp başlatmama.
  • autorestart: Otomatik olarak yeniden başlatıp yeniden başlatmama.
  • user: Komutu çalıştırmak için hangi sistem hesabının kullanılacağı.
  • numprocs: Eşzamanlı süreç sayısı, başlatılacak süreç sayısını gösterir.
  • stdout_logfile: Çalışma günlüğünün kaydedildiği yer.