12 Aralık 2013 Perşembe

RabbitMQ'yi verimli kullanmak

RabbitMQ hakkında genel bilgi edinmek için sevgili Mustafa'nın yazısına bakabilirsiniz http://www.mustafaileri.com/post/60580598616/rabbitmq-ve-amqp-uzerine-biraz-tecrube-eski-yaz Benim burada bahsetmek istediğim biraz detay ve kısa bir bilgi.

Default ayarlar ile kuyruğa yaklaşık 7000 mesaj bastıktan sonra 1 adet consumer çalıştırırsanız, bu alabileceği kadar mesajı üstüne alır. İkinci consumer açarsanız buda kalan kısımdan alabileceğini alır. Üçüncü consumer açtığınızda bu consumer'a maalesef mesaj kalmamış olabilir!




Benim örneğimde consumer başına yaklaşık 3000 mesaj düşüyor. Peki bu ne anlama geliyor?

Siz 10.000 mesaj için 10.000 consumer açsanız maalesef bunların sadece 3-5 tanesi aktif olacak.
Yalnız dikkat edilmesi gereken husus bu hesap önce mesajlar basılıp sonra sonra consumer aktif olduğu durumlar için geçerlidir. Eğer siz 10.000 consumer ayağa kaldırır bir yandan sürekli kuyruğa mesaj gönderirseniz RabbitMQ bunu dağıtacaktır. Boşta olan her consumer üzerine mesaj alıp işleyecektir.

Peki bunu nasıl aşabiliriz?

Tabiiykide her kuyruğun alacağı mesaj sayısını belirterek.


Consumerlar için kaç adet mesaj alacağını basic_qos ile bildiriyoruz PHP tarafında örnek kod şu şekilde oluyor;

        $channel = $this->getConnection()->channel();
        $channel->basic_qos(0, 100, null);
        $this->setChannel($channel);

Biz şu kütüphaneyi kullanıyoruz size de tavsiye ederim https://github.com/videlalvaro/php-amqplib

Hiç yorum yok: