Çeviri
Mesajlaşma, herhangi bir dağıtık sistemin temel bir parçasıdır. Üreticinin herhangi sayıda tüketiciye mesaj göndermesine izin verir ve tüketici hakkında herhangi bir bilgi sahibi olmak zorunda değildir. Bu, gerçekten asenkron ve kopan iletişim için büyük bir yardım.
RabbitMQ kullandığınızda, yukarıdaki diyagram çok temel ama tipik bir yapıyı gösteriyor. Bir yapımcı anahtara bir mesaj gönderiyor. Yönlendirme mantığına göre, anahtar mesajı anahtara bağlı kuyruğa koyar. Daha spesifik olarak, eğer bu bir yayın tipi anahtarsa, bu mesajın kopyası her kuyruk için defalarca gönderilir. Bir tüketici mesajı alıp işleyebilir.
Yukarıdaki yapının üreticiler ve tüketiciler için başarılı çalışması için önemli bir varsayım, tüm RabbitMQ bileşenlerinin (yani kuyruklar, anahtarlar ve bağlamalar) önceden oluşturulması gerektiğidir. Bir tüketici anahtara mesaj gönderemez Anahtar mevcut değilse, mevcut olmayan bir kuyruktan mesajları işleyemez.
Bu nedenle, üretici/tüketici mesajı göndermeden/almadan önce, üretici/tüketici değerinin bir kuyruk, geçiş ve bağlama ilişkisi oluşturmasına izin verilmesi zor değildir. Her iki yolun avantaj ve dezavantajlarına bir göz atalım.
1. Sorumlulukları ayırt et
Görüntü çevirisi (1. Üretici bir anahtar oluşturur 2. Tüketici bir kuyruk oluşturur ve kuyruğu switch'e bağlar)
Üreticiler ve tüketicilerin tamamen ayrılması için, ideal olarak, üreticiler sadece anahtarla ilgili bilgileri bilir (kuyruk değil), tüketiciler ise sadece kuyruk hakkında bilgi sahibi olur (anahtarı değil). Bağlama ilişkisi, anahtar ile kuyruk arasındaki ilişkiyi gösterir
Olası bir yol, üreticinin anahtarın oluşturulmasını gerçekleştirmesi ve tüketicinin kuyruğu oluşturup kuyruşu switch'e bağlamasıdır. Bu ayrıştırma yönteminin avantajı, tüketicinin bir kuyruk ihtiyacı varsa, sadece bir kuyruk oluşturup talebe göre bağlaması ve üreticinin kuyruk hakkında herhangi bir bilgiye sahip olması gerekmemesidir. Ancak bu yeterli bir ayrışma değildir: çünkü tüketicinin anahtarı bağlamak için onu bilmesi gerekir.
2. Her şeyi yapımcılar yaratır
Üretici çalışırken, tüm gerekli bileşenleri (anahtarlar, kuyruklar ve bağlamalar) oluşturacak şekilde yapılandırılabilir. Bu yaklaşımın avantajı, mesajların kaybolmamasıdır (çünkü kuyruk zaten oluşturulmuş ve anahtara bağlanmış ve hiçbir tüketicinin önce başlatmasına gerek yoktur).
Ancak bu, üreticinin switch'e bağlanması gereken tüm kuyrukları bilmesi gerektiği anlamına gelir. Bu oldukça bağlantılı bir yoldur. Bunun nedeni, her yeni kuyruk eklenmesi gerektiğinde, üreticinin kuyruk oluşturmak ve bağlamak için yeniden yapılandırıp dağıtması gerektiğidir
3. Tüketiciler her şeyi yaratır
Tersine, tüketicinin çalışırken ihtiyaç duyduğu anahtarları, kuyrukları ve bağları oluşturmasına izin vermektir. Önceki yaklaşımda olduğu gibi, bu yöntem de bağlantı sağlar çünkü tüketici, kuyruğuna bağlı olduğu anahtar hakkında bilgi sahibi olmalıdır. Switch'teki herhangi bir değişiklik (örneğin isim değişikliği gibi) tüm tüketicilerin yeniden yapılandırılıp dağıtılması gerektiği anlamına gelir. Büyük kuyruklar ve tüketiciler olduğunda, bu karmaşıklık çok zor olabilir.
4. Hiçbiri bir şey yaratmaz
Tamamen farklı bir yaklaşım, ne üreticinin ne de tüketicinin gerekli bileşenleri üretmesidir. Bunun yerine, önceden yönetici eklentisinin kullanıcı arayüzü veya yönetici komuta sistemi kullanılarak oluşturulur. Bu yöntem aşağıdaki avantajlara dayanır:
- Üreticiler ve tüketiciler tamamen ayrılabilir. Üreticiler sadece borsayı bilir, tüketiciler ise sadece kuyrukları bilir.
- Bu, dağıtım hattının bir parçası olarak kolayca betiklenebilir ve otomatikleştirilebilir
- Yeni kuyruklar gibi herhangi bir değişiklik, mevcut yayıncılar ve tüketicilere dokunmadan eklenebilir
özet
Dağıtık sistemlerde, asenkron mesajlar ayrılmanın faydalı bir yoludur, ancak onları ayırılmış tutmak için temel mesajlaşma yapısını korumak için etkili bir strateji sürdürmek gerekir (RabbitMQ'da bunlar kuyruklar, anahtarlar ve bağlamalardır).
Yayıncı ve tüketici hizmetleri, ihtiyaç duydukları şeyi kendileri oluşturmaktan sorumlu olabilir, ancak ilk mesaj kaybı, bağlanma ve işletim bakımı (yapılandırma ve dağıtım açısından) açısından maliyetli olabilirler.
Mesajlaşma sistemi yapılandırmasını gerektiği yerde yönetmenin en iyi yolu muhtemelen uygulama dışında script yazmaktır. Bu, hizmetlerin ayrılmış kalmasını ve kuyruk sisteminin ihtiyaç duyulduğunda dinamik olarak değişebilmesi ve çok sayıda mevcut hizmeti etkilemeden mümkün olmasını sağlar.
Özgün:Bağlantı girişi görünür. Orijinal İngilizce:Bağlantı girişi görünür.
|