RabbitMQ Nedir? Python Üzerinde Kullanımı #2

Bir önceki yazının devamı niteliğinde bir yazı olacaktır. O yazıya da göz atmak isterseniz şöyle alalım; RabbitMQ Nedir? Pika ile Python Üzerinde Kullanımı

İlk RabbitMQ yazımda basit bir iş döngüsü oluşturmuş ve bunu çalıştırmıştık. Şimdi bir adım daha derine inmeye çalışacağım. 3 bileşen tanımlamıştık (Producer, Queue ve Consumer). Şimdi burada atladığımız bazı bileşenleri de tanımlamaya çalışayım.

Exchanges

Daha önce basit olması adına söylediğimiz, “producer queue’ye mesajımızı iletir” tanımı hatalıydı. Aslında producer mesajını bir exchange bileşenine iletir, queue bileşeni ile konuşmaz. Bir önceki örnek üzerinde producer.py dosyasında publish metodunu çağırırken exchange adında bir parametreyi boş olarak kullanmıştık zaten. Bu boş gönderim varsayılan davranışı çağırır.

channel.basic_publish(exchange='',
                      routing_key='selam',
                      body='Merhaba!')

Burada özel bir exchange kullanmak istiyorsak öncelikle bunu tanımlamamız gerekli.

channel.exchange_declare(exchange='selam_exc',
                         type='direct')

Daha sonra bunu dağıtım içerisinde kullanabiliriz.

channel.basic_publish(exchange='selam_exc',
                      routing_key='selam',
                      body='Merhaba!')

Burada exchange üzerinde tanımlanan type parametresine göre davranışı değişecektir. Alternatifler şöyle;

direct : Varsayılandır, mesajları dengeli biçimde queue’lere dağıtabilir.

fanout : Gelen mesajı kendisine bağlı bütün queue’lere dağıtır. Örneğin bir oyununuz var ve mevcut bütün sunucularda skor tablosunu güncellemeniz gereken durumlar var. Fanout tipinde bir exchange bu iş için uygun olacaktır. Bu tipte exchange’ler için, tüm queue’lere gönderim yaptığından, routing_key parametresi işlevsiz kalacaktır.

topic : Bu tip üzerinde belli bir desen ile mesajımızın dağıtılmasını sağlayabiliyoruz.

headers : Bu tipte yine routing_key parametresi dikkate alınmaz, bunun yerine mesaj üzerinde belli değerler (header) ile mesajı nasıl yönlendireceği tespit eder.

Exchange kavramı producer ile queue arasında bir köprüdür ve burayı yönetmemizi sağlar. Bu arada, daha önce kullandığımız, exchange ile queue arasında olan bir bileşen daha var, ROUTE.

RabbitMQ üzerindeki şu görsel daha iyi anlatıyor.

Yeni tanımladığımız route, exchange bileşenleri ile queue bileşenini birbirlerine bağlamak için ise queue_bind metodu kullanılır. Burada exchange tipine göre routing_key parametresi boş bırakılabilir.

channel.queue_bind(exchange='exchange_adi',
                   queue='queue_adi',
                   routing_key='route_adi')

 

 


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir