Giriş: RabbitMQ'da, üreticiler tarafından gönderilen tüm mesajlar Exchange tarafından kabul edilir ve Exchange belirli bir politikaya göre bunları depolama için Queue'ya iletir RabbitMQ dört tür alışveriş sunar: fanout, direkt, konu ve başlık Başlık modu pratikte daha az kullanılır ve bu makale sadece ilk üç modu karşılaştırmaktadır.
1. Doğrudan Değişim
Direct Exchange'e gönderilen tüm mesajlar, RouteKey'de belirtilen Kuyruk sayfasına iletilir.
1. Genel olarak, rabbitMQ ile gelen Exchange'i kullanabilirsiniz:" (Exchange'in adı boş bir dizidir, bundan sonra varsayılan Exchange olarak adlandırılacaktır).
2. Bu modda, Exchange üzerinde herhangi bir bağlama işlemi yapılmasına gerek yoktur
3. Mesajlaşma için bir "RouteKey" gereklidir; bu, gönderilecek kuyruğun adı olarak basitçe anlaşılabilir.
4. RouteKey'de belirtilen kuyruk adı vhost'ta yoksa, mesaj kaldırılır.
2. Grup Değişimi
Fanout Borsası'na gönderilen tüm mesajlar, o Borsaya bağlı tüm Kuyruklara iletilir.
1. Yönlendirme tablosunun bir deseni olarak anlaşılabilir
2. Bu mod RouteKey gerektirmez
3. Bu mod, Exchange'in Kuyruğuna önceden bağlanmasını gerektirir, bir Exchange birden fazla Kuyruğa bağlanabilir ve bir Queue birden fazla Exchange'e bağlanabilir.
4. Mesajı alan Borsa herhangi bir Kuyruk ile bağlı değilse, mesaj düşürülür.
3. Konu Değişimi
Konu Değişimi'ne gönderilen tüm mesajlar, RouteKey'de belirtilen konulara önem veren tüm Kuyruklara iletilir
1. Bu desen daha karmaşıktır, basitçe söylemek gerekirse, her kuyruğun kendi endişe konusu vardır, tüm mesajların bir "başlığı" (RouteKey) vardır ve Exchange, bu mesajı endişe konusu olan RouteKey ile uydurabilecek tüm kuyruklara iletecektir.
2. Bu mod, Exchange'i ve Kuyruk'u önceden bağlayan bir RouteKey gerektirir.
3. Bağlama sırasında, kuyruğun önem verdiği bir konu verin; örneğin "#.log.#" gibi, kuyruğun loglarla ilgili tüm mesajlara önem verdiğini belirtmek için (RouteKey ile "MQ.log.error" mesajı kuyruğun içine iletilir).
4. "#" 0 veya birkaç anahtar kelime anlamına gelirken, "" ise bir anahtar kelime anlamına gelir. Örneğin, "log." "log.warn" ile eşleşebilir, ancak "log.warn.timeout" ile eşleşemez; Ama "log.#" yukarıdakiyle eşleşiyor.
5. Benzer şekilde, Exchange RouteKey ile eşleşen bir Queue bulamazsa, bu mesajı bırakır.
|