TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP

İyi günler Habr! Toplamayı başardığım bir ders kitabı referans kitabını paylaşmak istiyorum RabbitMQ ve kısa öneriler ve sonuçlara yoğunlaşın.

içindekiler

  • TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP ve RPC
  • TavşanMQ. Bölüm 2. Değişimleri Anlamak
  • TavşanMQ. Bölüm 3. Kuyrukları ve Bağlantıları Anlamak
  • TavşanMQ. Bölüm 4. Mesajların ve çerçevelerin ne olduğunu anlamak
  • TavşanMQ. Bölüm 5: Mesaj Yayınlama ve Tüketim Performansı
  • TavşanMQ. Bölüm 6. Federasyon ve Kürek modüllerinin gözden geçirilmesi
  • TavşanMQ. Bölüm 7. Bağlantı ve Chanel Hakkında Detaylar
  • TavşanMQ. Bölüm 8. .NET'te RabbitMQ
  • TavşanMQ. Bölüm 9. İzleme

Kısaca AMQP hakkında

AMQP (Gelişmiş Mesaj Sıralama Protokolü), sistem bileşenleri arasında mesaj aktarımına yönelik açık bir protokoldür. Temel fikir, bireysel alt sistemlerin (veya bağımsız uygulamaların), yönlendirmeyi gerçekleştiren, muhtemelen teslimatı garanti eden, veri akışlarını dağıtan ve istenen mesaj türlerine abone olan bir AMQP aracısı aracılığıyla keyfi bir şekilde mesaj alışverişinde bulunabilmesidir.

Protokol AMQP üç kavramı tanıtıyor:

TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP

  • exchange (değişim noktası veya değişim) - mesajlar ona gönderilir. Değişim noktası mesajı dağıtır bir veya daha fazla kuyrukta. O iletileri bir kuyruğa yönlendirir oluşturulan bağlantılara göre (binding) onunla sıra arasında
  • queue (kuyruk) - diskteki veya RAM'deki veri yapısı mesajlara olan bağlantıları saklar ve mesajların kopyalarını verir consumers (tüketicilere)
  • binding (bağlayıcı) - bir kural değişim noktasına bu mesajların hangi sıraya girmesi gerektiğini söyler

Protokol en üstte çalışır TCP / IP.

Kısaca Erlang hakkında

Projenin kaynak kodu şu adresteki depodadır: GitHub. Mimari RabbitMQ sunucusu dayalı Erlang ve BEAM.

Erlang şirket tarafından geliştirilen Ericsson 1980'lerin ortalarında %99,999 çalışma süresi gerektiren uygulamalar için dağıtılmış, hataya dayanıklı, gerçek zamanlı bir sistem olarak ortaya çıktı. Erlang çeşitli endüstrilerde ve modern uygulamalarda kullanılır; WhatsApp. Daha fazlasını makalede okuyabilirsiniz Facebook'un 19 milyar dolara satın aldığı WhatsApp mimarisi

Kısaca RabbitMQ hakkında

RabbitMQ açık kaynaklı bir mesaj aracısıdır. Mesajları protokolün tüm temel ilkelerine göre yönlendirir AMQP tarif edilmek özellikler. RabbitMQ protokolü uygular ve tamamlar AMQP.

Mesajlaşma modelinin ana fikri RabbitMQ şey producer (yayıncı) iletileri doğrudan kuyruğa göndermez. Aslında ve çoğu zaman yayıncı, mesajın herhangi bir kuyruğa teslim edilip edilmeyeceğini bile bilmiyor.

Bunun yerine yayıncı yalnızca exchange'e mesaj gönderebilir. Borsa bir yandan yayıncılardan mesaj alırken diğer yandan da bunları kuyruklara gönderiyor. Borsa, aldığı mesajla tam olarak ne yapacağını bilmelidir. Belirli bir sıraya eklenmeli mi? Birden fazla kuyruğa eklenmeli mi? Veya mesaj göz ardı edilmelidir.

TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP

Kısa çalışma RabbitMQ şu şekilde tarif edilebilir:

  1. Yayıncı belirli bir borsaya mesaj gönderir
  2. Bir mesaj alan santral, kendisi ile kuyruk arasındaki bağlayıcı kurallara uygun olarak onu bir veya daha fazla kuyruğa yönlendirir.
  3. Kuyruk bu mesaja bir referans saklar. Mesajın kendisi RAM'de veya diskte saklanır
  4. Tüketici kuyruktan bir mesaj almaya hazır olduğunda, sunucu bağlantı aracılığıyla mesajın bir kopyasını oluşturur ve gönderir.
  5. Tüketici mesajı alır ve komisyoncuya onay gönderir
  6. Aracı, onay aldıktan sonra mesajın bir kopyasını kuyruktan kaldırır. Daha sonra RAM ve diskten siler

RPC

Süreç RPC (uzaktan prosedür çağrısı) çekirdekle hemen hemen tüm etkileşimlerin temelini oluşturur RabbitMQ. Örneğin, müşterinin koşullarıyla ilgili ilk görüşmeler RabbitMQ, belirli bir süreci gösterir RPC. Bu sıra tamamlandıktan sonra, RabbitMQ müşteriden gelen istekleri kabul etmeye hazır olacaktır:

TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP

Ayrıca şartnamede AMQP hem istemci hem de sunucu komutlar verebilir. Bu, istemcinin sunucuyla iletişim kurmayı beklediği anlamına gelir. Komutlar sınıflar ve yöntemlerdir. Örneğin, Connection.Start – yöntem çağrısı Start sınıf Connection.

Bağlantı ve kanallar

İstemci ve sunucu arasındaki bu tür bilgi alışverişi için, kanallar. Kanallar içinde oluşturulur özel bağlantı. Her kanal diğer kanallardan izole edilmiştir. Senkron durumda bir yanıt alınana kadar bir sonraki komutun yürütülmesi mümkün değildir.

Komutları paralel olarak gönderebilmek için birkaç kanal açmanız gerekir. Her kanal ayrı bir kanal oluşturur Erlang işlem. Bir bağlantının birden fazla kanalı olabilir (çoğullama). Her kanal için bellekte belirli yapılar ve nesneler bulunur. Bu nedenle, bir bağlantıda ne kadar çok kanal varsa, o kadar çok RabbitMQ daha fazla bellek kullanıyor böyle bir bağlantıyı yönetmek için.

TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP

Kullanarak bağlantı ve kanal oluşturmanın basit bir örneği RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Включение автоматичекого восстановления
        // соединения после сбоев сети 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

Her işlem için yeni bir bağlantı açılması kesinlikle tavsiye edilmez, çünkü bu yüksek maliyetlere yol açacak. Kanallar da kalıcı olmalıdır ancak birçok protokol hatası kanalın kapanmasına neden olur, dolayısıyla kanalın ömrü bağlantının ömründen daha kısa olabilir.

RabbitMQ nerede kullanılır?

Mikro hizmetler bağlamında protokol AMQP ve onun uygulanması RabbitMQ sıklıkla kullanılır asenkron etkileşim hizmetler arasındadır.

Bağlamda IIOT protokol AMQP ve onun uygulanması RabbitMQ sunucular (sunucu-sunucu) arasında veri alışverişi için kullanılır. Ayrıca eklentiyi kullanın MQTT Eklentisi RabbitMQ bu protokolün bir uygulamasıdır MQTT Düşük hızlı, yüksek gecikmeli ortamlarda sensör ile sunucu arasında veri aktarımı için (desteklenen protokollerin tam listesi şu adreste listelenmiştir: proje web sitesi).

Bir sonraki makalede Exchange'leri daha ayrıntılı olarak anlamaya başlayacağız.

referanslar

Kaynak: habr.com

Yorum ekle