RabbitMQ #6 — Header Exchange

Cenker Kumlucalı
3 min readAug 2, 2023

--

Merhaba sevgili okuyucular! RabbitMQ üzerine yazılarımın bir sonraki bölümüne hoş geldiniz. Önceki bölümlerde, Direct, Topic ve Fanout Exchange’lerin detaylarına daldık. Şimdi ise sıra Header Exchange’lerde. Bu tür, mesajlarda belirli başlık özelliklerine (headers) dayalı bir eşleşme sağlar. Mesajların yönlendirilmesi konusunda biraz farklı bir yaklaşım sunarlar ve bu yazıda bu yaklaşımı derinlemesine inceleyeceğiz.

Header Exchange Nedir?

Header Exchange’ler, belirli başlık özelliklerine dayalı bir eşleşme sağlayarak, mesajları yönlendirir. Farklı exchange türlerinden farklı olarak, Header Exchange’ler, yönlendirme anahtarları yerine mesaj başlıklarını kullanır. Başlık özellikleri, anahtar-değer çiftleri biçiminde tanımlanır ve bu çiftler genellikle bir mesajın meta verilerini temsil eder.

Örneğin, bir mesajın format başlık özelliği pdf olabilir, ya da x-match başlık özelliği any ya da all olabilir. Bu özelliklerin ne anlama geldiğini daha detaylı inceleyelim:

  • x-match özelliği all olduğunda, tüm anahtar-değer çiftlerinin hem yayıncı tarafından gönderilen mesajın başlık özellikleriyle hem de kuyruk tarafında belirtilen başlık özellikleriyle eşleşmesi gerekir. Bu, başlık özelliklerinin tam bir eşleşme gerektirdiği durumlar için kullanılır.
  • x-match özelliği any olduğunda, en az bir anahtar-değer çiftinin yayıncı tarafından gönderilen mesajın başlık özellikleriyle ve kuyruk tarafında belirtilen başlık özellikleriyle eşleşmesi yeterlidir. Bu, başlık özelliklerinin kısmi bir eşleşme gerektirdiği durumlar için kullanılır.

Header Exchange’ler, kompleks yönlendirme kuralları gerektiren durumlar için idealdir. Başlık özellikleri, belirli kriterlere göre mesajların hangi kuyruklara gideceğini belirlemek için kullanılabilir.

Header Exchange ile İlgili Bir Örnek

Aşağıda, bir Header Exchange örneği verilmiştir. Bu örnekte, C# kullanarak bir RabbitMQ bağlantısı oluşturuyoruz, bir Header Exchange tanımlıyoruz ve ardından mesajımızı yayınlıyoruz:

var factory = new ConnectionFactory() { HostName = "localhost" };
using(var connection = factory.CreateConnection())
using(var channel = connection.CreateModel())
{
channel.ExchangeDeclare("my_header_exchange", "headers");
var properties = channel.CreateBasicProperties();
properties.Headers = new Dictionary<string, object>();
properties.Headers.Add("format", "pdf");
properties.Headers.Add("x-match", "any");
var body = Encoding.UTF8.GetBytes("Hello, world!");
channel.BasicPublish("my_header_exchange", "", properties, body);
}

Bu örnekte, format başlık özelliğini pdf olarak ve x-match başlık özelliğini any olarak belirledik. Böylece, bu mesajın, başlık özelliklerinden en az biri format: pdf veya x-match: any ile eşleşen herhangi bir kuyruğa yönlendirileceğini belirtmiş olduk.

Header Exchange ile Gelişmiş Senaryo

Bir Header Exchange’in nasıl çalıştığını daha iyi anlamak için, bir log yönetim sistemi senaryosunu düşünelim. Belki de uygulamanızın farklı bileşenlerinden gelen logları farklı şekillerde işlemek istiyorsunuz. Belki bazı loglar hata mesajlarıdır ve bunları bir hata izleme hizmetine yönlendirmek istersiniz. Diğer loglar ise bilgilendirme mesajlarıdır ve bunları bir log analiz servisine yönlendirmek isteyebilirsiniz.

Bu durumda, bir Header Exchange kullanabilirsiniz. Log mesajınızın başlık özelliklerini type: error veya type: info olarak belirleyebilir ve x-match: any başlık özelliğini kullanabilirsiniz. Bu şekilde, log mesajınızın tipine göre ilgili hizmetin kuyruğuna yönlendirilecektir.

Header Exchange’lerin sunduğu bu esneklik, uygulamanızın farklı bileşenlerini birbirine bağlarken büyük bir avantaj sağlar. Bu türün sunduğu özellikler sayesinde, uygulamanızın mesajlaşma sistemi daha da güçlü hale gelir.

Sonuç

Bu makalede, RabbitMQ’nun Header Exchange türünü ele aldık. Bu tür, belirli başlık özelliklerine dayalı bir eşleşme sağlayarak mesajları yönlendirir, ve bu da karmaşık yönlendirme ihtiyaçlarını karşılamak için oldukça kullanışlıdır.

RabbitMQ ile daha derinlemesine bilgi edinmek ve farklı Exchange türlerini deneyimlemek için gelecek yazılarıma göz atmayı unutmayın. Şimdilik hoşça kalın ve keyifli kodlamalar!

--

--

No responses yet