RabbitMQ – Direct Exchange

Selamlar, bu makalede Direct Exchange üzerine konuşuyor olacağız.Önceki makalede Fanout Exchange yapısına değinmiştik,iki exchange arasında ki farkı anlamak için Fanout Exchange yazımı okumanızı tavsiye ederim.

Direct Exchange producer tarafından gönderilen mesajları alarak kendisine tanımlanmış olan routingKey’e göre kuyruklara dağıtımını gerçekleştiren exchange türüdür. Fanout Exchange kullanırken herhangi bir routingKey tanımlaması gerçekleştirmemiştik. Gönderilen mesajlar tüm kuyruklara eşit bir şekilde dağıtılmıştı. İki exchange arasındaki temel fark tam olarak burada ortaya çıkıyor.

Şimdi örnek bir senaryo üzerinden kullanımına göz atalım ve Direct Exchange mantığını daha iyi kavramaya çalışalım.

Bir log mekanizmamız var. Temel olarak 4 adet log tipini tutuyoruz. Rastgele 10 tane log mesajı üretiyoruz. Log mesajlarını üretirken her mesaja random bir log türü atıyoruz. Bu kısımda üretilen logun tipi mesaj exchange gönderilirken parametre olarak geçilecek routingKey değeridir.Daha sonra ise başka bir uygulamadan yada uygulamalardan ilgili routingKey değerine ait kuyrukları dinliyoruz. Uygulamamızın genel mantığı bu şekilde. Şimdi gelin adım adım kodlarımızı inceleyelim.

Producer

Kodlarımızı inceleyecek olursak ConnectionFactory sınıfından bir nesne yaratılır. Yaratılan bu sınıf üzerinden HostName set edilir. ConnectionFactory sınıfı bizim RabbitMQ hostuna bağlanmamıza sağlayacak olan sınıftır. Daha sonra CreateConnection()methodu ile bağlantı gerçekleştirilir.

CreateModel() methodu ile yeni bir channel oluşturulur.Channel üzerinden ExchangeDeclare() methodu ile yeni bir exchange oluşturulur. Son olarak ilgili channel kullanılarak BasicPublish() methodu çağırılır ve routingKey parametresi geçilerek mesaj gönderimi gerçekleştirilir.

Consumer

QueueDeclare() methodu ile yeni bir Queue oluşturulur. Oluşturulan Queue QueueBind() methodu kullanılarak ilgili exchange bind edilir. Bind işlemi sırasında geçilen routingKey parametresi ile dinlenecek olan kuyrukları belirtmektedir.Biz senaryomuz gereği Ciritical,Error routingKey değerlerine ait kuyrukları dinliyor olacağız. EventingBasicConsumer sınıfından bir nesne yaratılır. Oluşturulan channel parametre olarak geçilir. Üretilen nesne üzerinden Received event’i tetiklenir ve kuyruk dinlemeye alınır. Son olarak BasicConsume methodu ile ilgili kuyruktan mesaj alınır ve işlenir.

Burada dikkat edilmesi gereken husus ise direct exchange adrese teslim dağıtım yapan bir exchange türüdür. Parametre olarak geçilen routingkey gönderilen mesajın yol haritasıdır diyebiliriz. Geliştirmiş olduğumuz örnekte olduğu gibi routingkey’e parametre olarak tek bir değer geçebiliyoruz. Consumer tarafında dinlenecek kuyrukların seçiciliğinde bizi biraz kısıtlıyor olsada anlaışır , adrese teslim yapısı sayesinde oldukça kullanışlı bir exchange türü diyebiliriz.

Benim bu makalede aktaracaklarım bu kadar. Umarım faydalı ve anlaşılır bir yazı olmuştur. Bir sonraki makalede Topic Exchange konusu ile devam ediyor olacağız. Hoşçakalın 🙂

Source


https://www.rabbitmq.com/documentation.html
https://github.com/eaktassssss/RabbitMQExchange

BUNLAR DA HOŞUNUZA GİDEBİLİR...

Bir cevap yazın

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