|
|
Yayınlandı 14.08.2022 23:22:55
|
|
|
|

AMQP protokolüne giriş
AMQP (Gelişmiş Mesaj Kuyruşu Protokolü), birleşik mesajlaşma hizmetleri sağlayan ve mesaj odaklı ara yazılım için tasarlanmış uygulama katmanı protokolleri için açık bir standart olan uygulama katmanı standart protokolüdür. AMQP, süreçler arasında asenkron mesajların iletilmesini sağlayan bir ağ protokolüdür.
Bu protokole dayalı istemci ve mesaj ara yazılımları, farklı istemci/middleware ürünleri, farklı geliştirme dilleri vb. tarafından sınırlandırılmadan mesaj iletebiliyor.
AMQP'nin ana özellikleri mesaj odaklı, kuyruklu, yönlendirme (eşler arası ve yayınlama/abone olmak dahil), güvenilirlik ve güvenliktir. AMQP, mesaj sağlayıcıları ve müşterilerin davranışını zorunlu kılarak farklı tedarikçiler arasında gerçek bir birlikte çalışabilirlik sağlar.
AMQP ve JMS
JMS, erken mesaj ara yazılımını standartlaştırma girişimiydi, sadece API seviyesinde standartlaştırılmıştı ve birlikte çalışabilirlik yaratmaktan çok uzaktı.
JMS'nin aksine, AMQP, ağ üzerinden bayt cinsinden akan veri formatını tanımlayan kablo düzeyinde bir protokoldür. Sonuç olarak, mesajları oluşturan ve yorumlayan bu veri formatına bağlı olan herhangi bir araç, diğer uyumlu araçlarla birlikte çalışabilir.
AMQP çekirdek bileşimi
Yapımcı
Prodüksiyon haberleri.
ConnectionFactory
Connection'ı üreten fabrika.
Bağlantı
Bağlantı, Broker TCP/IP/Triple Handshake ve Quad Wave ile uygulama ağı bağlantısı.
AMQP bağlantıları genellikle uzun bağlantılardır. AMQP, güvenilir teslimat sağlamak için TCP kullanan bir uygulama katmanı protokolüdür. AMQP, kimlik doğrulama mekanizmaları kullanır ve TLS (SSL) koruması sağlar. Bir uygulamanın artık AMQP proxy'sine bağlanması gerekmediğinde, TCP bağlantısını kapatmak yerine AMQP bağlantısını zarifçe serbest bırakması gerekir.
Kanal
Ağ kanalı, bağlantı üzerine inşa edilmiş hafif bir bağlantıdır. Neredeyse tüm işlemler, mesaj okuma ve yazma kanalları olan Kanallarda gerçekleştirilir ve istemciler her kanal için çiftler oluşturabilir; bunların her biri bir oturum görevini temsil eder.
Bağlantı fiber optik kabloya benzediliyorsa, Kanal kanalı fiber optik kabloya benzetilir. Bir Bağlantı üzerinde herhangi sayıda kanal oluşturulabilir.
İş operasyonlarımızın çoğu Kanal arayüzünde yapılır, bunlar arasında:
- queueDeclare
- Switch için ExchangeDeclare
- queueBind queueBind
- Mesajı yayınla temel Yayınla.
- Tüketici Haberleri TemelTüketim vb.
Komisyoncu
Rabbitmq gibi AMQP varlık hizmetlerini uygulamak için istemcinin bağlantısını kabul edin.
VirtualHost (Web Barındırma)
Mantıksal izolasyon için kullanılan sanal barındırma, sanal bir ev sahibi birden fazla borsa ve kuyruktan oluşabilir ve aynı sanal ev sahibi aynı isimli borsalara sahip olamaz.
Tek bir proxy üzerinde birden fazla izole ortamı (kullanıcılar, kullanıcı grupları, anahtarlar, kuyruklar vb.) uygulamak için AMQP, sanal hostlar (sanal hostlar - vhostlar) kavramını sunar. Bu, AMQP varlıkları için tamamen izole bir ortam sağlayan web sunucuları web barındırma konseptine çok benzer. Bağlantı kurulduğunda, AMQP istemcisi hangi sanal hostun kullanılacağını belirler.
Değiş tokuş etmek
Anahtar, mesajları kabul eder ve yönlendirme anahtarına göre (mesaj depolama özelliği olmadan) sınırlı kuyruğa mesaj gönderir.
Switch, mesaj göndermek için kullanılan bir AMQP varlığıdır. Anahtar bir mesaj aldıktan sonra, onu bir veya sıfır kuyruk arasında yönlendiriyor. Kullandığı yönlendirme algoritması, anahtar tipi ve bağlama kurallarına göre belirlenir.
Anahtar Türü:
- Doğrudan değişim
- Fanout değişimi
- Konu değişimi
- Başlık değişimi
Anahtar Özellikleri:
- Adı: Anahtarın adı
- Dayanıklılık: Bu anahtarın devam edip etmediğini gösteren bir süreklilik bayrağı
- Otomatik sil: Silme bayrağı, gösteriTüm kuyruklar bu değişim kullanılarak tamamlandığında, silinip silinmedikleri
- Argümanlar: Ajanın kendisine bağlı
Switch Durumu:
Sürekli anahtarlar, broker yeniden başlatıldığında mevcut olur, ancak aşamalı anahtarlar olmaz (aracı tekrar çevrimiçi olduktan sonra yeniden ilan edilmesi gerekir).
Varsayılan anahtar
Varsayılan borsa, aslında mesaj aracı tarafından önceden ilan edilmiş ve adı olmayan (isim boş bir dize) doğrudan bir değişimdir.
Varsayılan anahtarı özel doğrudan bağlı bir anahtar olarak düşünebilirsiniz. Varsayılan anahtar adı: Null dizisi (AMQP varsayılı) Varsayılan anahtar türü: Doğrudan bağlı anahtar
Bir kuyruk oluşturulurken, bağlanacak anahtar belirtilmedikçe otomatik olarak varsayılan anahtara bağlanır ve bağlamanın yönlendirme anahtarı adı kuyruk adıyla aynı olur.
Anahtara doğrudan bağlantı
Doğrudan bağlı bir anahtar, mesajın taşıdığı yönlendirme anahtarına göre karşılık gelen bağlama anahtarlarından oluşan bir kuyruk iletir. Mesajı işlemek için doğrudan anahtarın kullandığı tek yayın yönlendirmesi.
Bir Kuyruk oluşturulurken, doğrudan bir anahtara bağlıysa, yönlendirme anahtarının adını belirtmesine gerek yoktur, çünkü varsayılan yönlendirme anahtarı adı olur ve bu da Kuyruk adıyla aynıdır.
Doğrudan bağlı anahtarlar kuyruğu genellikle görevleri birden fazla tüketiciye bir döngüde dağıtır (buna polling diyoruz).
İş Akışı:
- Bir kuyruk anahtarına bağlanırken, R varsayılarak ona bir bağlama anahtarı verin;
- Yönlendirme Anahtarı içeren bir mesaj doğrudan bağlı bir anahtara gönderildiğinde, anahtar onu Yönlendirme Anahtarı olan bir kuyruğun içine yönlendirir.
Fan anahtarları
Fan anahtarı, bağlı yönlendirme anahtarı ne olursa olsun mesajları kendisine bağlı tüm kuyruklara yönlendirir.
Eğer N kuyruk bir sektör anahtarına bağlıysa, bu sektör anahtarına bir mesaj gönderildiğinde, anahtar mesajın bir kopyasını ayrı ayrı tüm N kuyruğuna gönderir. Fan anahtarları genellikle mesajların yayın yönlendirmesini yönetmek için kullanılır.
Uygulama Senaryoları:
mesaj yayını; Grup sohbeti fonksiyonu.
Tema değişimi
Konu anahtarı, yönlendirme anahtarına ve Exchange türüne göre bir veya daha fazla Kuyruk mesajı gönderir ve genellikle çeşitli yayınla/abone olma, yani yayımlama aboneliklerini uygulamak için kullanırız.
Doğrudan bağlı anahtarlar için yönlendirme kuralları sıkı bir şekilde eşleştirilir; bu da Yönlendirme Anahtarı'nın Kuyruk ile mesaj göndermeden önce Bağlama Anahtarı ile eşleşmesi gerektiği anlamına gelir. Konu değiştirme kuralları, bazı kuralların joker kartlarla sağlanmasıyla sağlanabilecek bulanık maçlardır.
Şart şunları belirtir:
- Bulanık eşleştirme için bağlama anahtarında iki özel karakter * ve # olabilir. burada * bir kelimeyi eşleştirmek için kullanılır, #用于匹配多个单词 (sıfır olabilir)
- Yönlendirme anahtarı, nokta ayrılmış bir dizedir (her bir dize nokta ile ayrılmış olarak bir kelime işareti diyoruz)
- Üretici Routing Key=A.A.A.A mesajını gönderdiğinde, yalnızca A.*.* tatmin edilir ve sadece queue1'e yönlendirilir.
- Üretici Routing Key=A.B.A mesajını gönderdiğinde, A.*.* ve *.B.* yetenekli notlar queue1 ve queue2'ye yönlendirilir.
- Üretici Routing Key=A.B.C mesajını gönderdiğinde, A.*.* ve *.B.* ile *.* memnuniyet sağlanır. C ise 1. sıra, 2. sıra, 3. sıraya yönlendirilir.
Uygulama Senaryoları:
- kategoriler veya etiketlerle ilgili haber güncellemeleri;
- Birden fazla çalışan tarafından tamamlanan arka plan görevleri, her biri belirli belirli görevleri üstlenmekten sorumludur.
Kafa anahtarı
Başlık anahtarları, mesajları yönlendirmek için yönlendirme anahtarının bağlama anahtarlarına eşleştirme kurallarına dayanmaz; bunun yerine gönderilen mesajın içeriğindeki başlık özniteliğine göre eşleşir.
Kafa anahtarları, doğrudan bağlı anahtarın başka bir tezahürü olarak düşünülebilir. Ancak, doğrudan anahtarın yönlendirme anahtarı bir dizi olmalıdır ve başlık öznitelik değerleri bununla sınırlı değildir; hatta tam sayılar veya hash değerleri (sözlükler) olabilirler. Daha fazla esneklik (ama pratikte nadiren kafa anahtarı kullanıyoruz).
İş Akışı:
- Bir kuyruk bir başlık anahtarına bağlandığında, eşleşme için aynı anda birden fazla başlık bağlanır.
- Gelen mesajlar bir başlık ve "x-match" parametresi taşır. "x-match" "any" olarak ayarlandığında, başlığın herhangi bir değeri eşleştirilebilir ve "x-match" "all" olarak ayarlandığında, başlığın tüm değerleri eşleştirilmelidir.
Switch Özeti
Bağlama
Exchange ile Queue arasında sanal bağlantı.
BindingKey, Exchange ve Queue bağlamaları için bir kural açıklamasıdır. Bağlama anahtarı, mevcut değişim altında şu anda bağlı olan Kuyruk için hangi tür Yönlendirme Anahtarı atanacağını belirtir.
Yönlendirme Anahtarı
Yönlendirme kuralları, sanal makinenin belirli bir mesajı nasıl yönlendireceğini belirlemek için kullanabileceği yöneleme kuralları.
Bağlama Anahtarı vs. Yönlendirme Anahtarı
- Bağlama anahtarı, kuyruk ile anahtar arasındaki bağlama anahtarıdır;
- Yönlendirme Anahtarı, üretici tarafından anahtara gönderilen bir bilgidir;
- Bağlama Anahtarı ve Yönlendirme Anahtarı karşılık geldiğinde, mesajı ilgili kuyruğa koyun.
Bağlama Anahtarı, Exchange ve Kuyruk bağlamasının kural tanımıdır; bu kural açıklamasıdır; Exchange bir mesaj aldığında, Exchange'in aldığı mesajın bir Routing Key alanı olur ve Exchange, bu Routing Anahtarını mevcut Exchange'in tüm bağlama anahtarlarıyla eşleştirir ve gereksinimler karşılanırsa Bağlama Anahtarı'na gönderilir Anahtar, mesajı göndermek için Kuyruk ile bağlıdır.
Çeşitli anahtarlarda Bağlama Anahtarı ile Yönlendirme Anahtarı
Varsayılan anahtar: Bağlama Anahtarı, Kuyruk adıdır ve özelleştirilemez. Yönlendirme Anahtarı, kuyruğun adına da başarıyla yönlendirilmezden önce Kuyruk adıdır Doğrudan bağlantı anahtarı: Bağlama Anahtarı, Kuyruk adıdır ve özelleştirilebilir. Yönlendirme Anahtarları, ancak Bağlama Anahtarı aynı olduğunda kuyruk içine başarılı şekilde yönlendirilebilir Fan anahtarı: Bağlama anahtarı yok; Tabii ki, Yönlendirme Anahtarı yok. Switch'e bağlı tüm kuyruklara otomatik yönlendirilir Tema anahtarı: özel Bağlama Tuşu; Yönlendirme anahtarını özelleştirin. Yönlendirme Anahtarı==Bağlama Anahtarı ve bulanık eşleşme başarıyla kuyruğun yönlendirilmelidir Kafa anahtarı: bağlama anahtarı yok; Tabii ki, Yönlendirme Anahtarı yok. Gönderilen mesajın içeriğindeki başlık özelliğine göre eşleşmeler
Sıra
Uygulama tarafından tüketilecek mesajları saklar.
Kuyruk Özellikleri:
- İsim: Kuyruğun adı
- Dayanıklı: Mesaj aracı yeniden başlatıldığında kuyruk hâlâ var
- Özel olarak: Sadece bir bağlantı tarafından kullanılır ve bağlantı kapandığında kuyruk silinir
- Otomatik sil: Son tüketici abonelikten çıktığında silinir
- Argümanlar: Bazı mesaj aracıları TTL'ye benzer bazı ekstra işlevler için kullanır
Kuyruk oluşturma: Kuyruklar ancak ilan edildikten sonra kullanılabilir. Eğer bir kuyruk zaten yoksa, kuyruk ilan etmek onu oluşturur. Eğer bildirilen kuyruk zaten varsa ve öznitelikler aynıysa, bildiri orijinal kuyruk üzerinde hiçbir etkisi olmaz. Eğer bildiredeki öznitelikler mevcut kuyruk özelliklerinden farklıysa, 406 hata kodu olan kanal düzeyinde bir istisna atılır.
Kuyruk kalıcılığı: Süreklilik kuyruğu diskte saklanır ve aracı yeniden başlatıldığında orada kalır. Devam etmeyen kuyruklara geçici kuyruklar denir. Tüm senaryolar ve vakalar kuyruk kalıcılığı gerektirmez.
Sürekli bir kuyruk, kendisine yönlendirilen mesajları kalıcı yapmaz. Mesaj ajanı kapatılırsa ve yeniden başlatılırsa, yeniden başlatma sırasında kalıcı kuyruk yeniden ilan edilir ve her durumda sadece kalıcı mesajlar yeniden geri yüklenebilir.
Tüketici
Tüketici Tüketimi Haberleri. AMQP'de tüketicilerin bekleyen mesajları almasının iki yolu vardır:
Mesaj ara yazılımı, mesajları tüketicilere iletir (push API) Tüketiciler aktif olarak mesaj alır (pull API) Not: Birden fazla tüketici aynı kuyruğa baktığında, kuyruktaki mesajlar yalnızca bir tüketici tarafından tüketilir (her tüketici için bir kez değil)
İleti
Mesajlar, hizmetler ve uygulamalar arasında iletilen veriler, Özellikler ve gövdelerden oluşur.
Nitelikler, mesaj önceliği, gecikme ve diğer gelişmiş özellikler gibi mesajları değiştirir ve ana gövde mesaj gövdesinin içeriğidir.
Mesaj Özellikleri:
- İçerik türü
- İçerik kodlaması
- Yönlendirme anahtarı
- Teslimat modu (kalıcı ya da değil)
- Teslimat modu (kalıcı veya kalıcı olmayan)
- Mesaj önceliği
- Mesaj yayınlama zaman damgası
- Son kullanma süresi
- Publisher application id
Mesaj gövdesi: Niteliklere ek olarak, AMQP mesajları ayrıca bir yük (mesajın aslında taşıdığı veri) içerir; bu da AMQP proxy tarafından opak bir bayt dizisi olarak ele alınır.
Mesaj aracı, yükü incelemez veya değiştirmez. Mesajlar, yük taşımadan yalnızca nitelikler içerebilir. Genellikle JSON gibi serileştirilmiş bir formatta veri kullanır ve para tasarrufu sağlamak için protokol tamponları ve MessagePack'ler, yapılandırılmış veriyi mesaj yükü olarak yayımlanmak üzere serileştirir. AMQP ve benzerleri genellikle yükleri tanımlamak için mesajlarla iletişim kurmak için "içerik türü" ve "içerik kodlama" alanlarını kullanır, ancak bu sadece geleneklere dayanır.
Mesaj kalıcılığı: Mesajlar kalıcı bir şekilde yayınlanır ve AMQP ajanı bu mesajı diskte saklar. Sunucu yeniden başlatıldığında, sistem alınan süreklilik mesajının kaybedilmediğini doğrular.
Sadece bir mesajı kalıcı bir anahtara göndermek veya onu kalıcı kuyruğa yönlendirmek mesajı kalıcı yapmaz: mesajın kalıcılığı tamamen mesajın kendi süreklilik moduna bağlıdır.
Mesajları sürekli bir şekilde yayınlamak performans açısından etkili olabilir.
AMQP çalışma süreci
Yayıncı, Exchange aracılığıyla bir mesaj yayınlar.
Anahtar, gelen mesajları yönlendirme kurallarına göre anahtara bağlı kuyruğa dağıtır.
Son olarak, AMQP temsilcisi bu kuyruğu abone olan tüketiciye mesajı iletecek ya da tüketici gerektiğinde mesajı kendi başına alacak.
AMQP mesajlaşma mekanizması
Mesaj onayı
Tüketiciler bazen mesajları işlemekte başarısız olur veya bazen doğrudan çöker. Ve ağ nedenleri de çeşitli sorunlara yol açabilir. Bu durum, AMQP ajanlarının mesajları silmek için doğru zamanın ne zaman olduğu sorusunu ortaya koyuyor.
AMQP'nin iki mesaj onay modu:
Otomatik Onay Modu: Mesaj ara yazılımı tarafından tüketiciye gönderildiği anda mesajı silin. (AMQP yöntemi kullanılarak: basic.deliver veya basic.get-ok) Açık onay modu: Mesajı silmeden önce tüketicinin onay göndermesini bekleyin. (AMQP yöntemi kullanılarak: basic.ack) Bir tüketici onay makbuzu göndermeden telefonu kapatırsa, AMQP temsilcisi mesajı başka bir tüketiciye yeniden iletir. O anda mevcut tüketici yoksa, mesaj aracı bir sonraki tüketicinin bu kuyruğa kayıt olmasını bekler ve ardından tekrar teslim etmeye çalışır.
Mesajları reddet
Bir tüketici mesaj aldığında, işleme süreci başarılı olabilir veya başarısız olabilir. Tüketici, mesaj aracı kaynağına (mesaj ara yazılımı) mesajın "reddedilen mesaj" nedeniyle işlenmediğini (veya bu noktada tamamlanamadığını) belirtebilir. Bir mesaj reddedildiğinde, tüketici mesaj aracısına mesajla ne yapacağını söyleyebilir - onu yok edecek ya da tekrar kuyruğa koyacak.
Bu kuyrakta sadece bir tüketici varsa, mesajı reddedip tekrar kuyruğa koymayı seçmediğinizden emin olun; böylece mesaj aynı tüketicide sonsuza dek döngüye girer.
AMQP'de, basic.reject yöntemi reddeden mesajları gerçekleştirmek için kullanılır. Ancak basic.reject adresinin bir sınırlaması var: onay içeren birden fazla mesajı reddetmek için kullanamazsınız. Ama RabbitMQ kullanıyorsanız, bu sorunu çözmek için negatif onaylar (nacks olarak da adlandırılır) adı verilen AMQP 0-9-1 uzantısını kullanabilirsiniz.
Özgün:Bağlantı girişi görünür.
|
Önceki:JS dizileri, her şeyin farkı ve kullanımıÖnümüzdeki:RabbitMQ AMQP mesaj mimarisinin ayrıntılı açıklaması
|