RabbitMQ. I Hissə. Giriş. Erlang, AMQP

Salam, Habr! Topladığım bilgilere dayanarak bir rehber kitapla paylaşmak istiyorum RabbitMQ ve bunları kısa öneriler ve sonuçlar halinde sıkıştırmak.

Mündəricat

  • RabbitMQ. Hissə 1. Giriş. Erlang, AMQP və RPC
  • RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq
  • RabbitMQ. Hissə 3. Queues və Bindings ilə tanış oluruq
  • RabbitMQ. Bölüm 4. Mesajlar ve çerçeveler hakkında konuşalım
  • RabbitMQ. Hissə 5. Mesajların nəşr və istehlak performansı
  • RabbitMQ. Hissə 6. Federation və Shovel modullarının icmalı
  • RabbitMQ. Hissə 7. Bağlantı və Kanal haqqında ətraflı
  • RabbitMQ. Hissə 8. RabbitMQ .NET-də
  • RabbitMQ. Hissə 9. Monitorinq

AMQP hakkında kısaca

AMQP (Advanced Message Queuing Protocol) — sistem bileşenleri arasında mesaj iletimi için açık bir protokoldür. Temel fikir, bağımsız alt sistemlerin (veya bağımsız uygulamaların) AMQP aracısı üzerinden mesajları herhangi bir şekilde iletebilmelerini sağlamaktır; bu aracı yönlendirme yapar, teslimatı garanti eder, veri akışlarını dağıtır ve gereken mesaj türlerine abone olmayı sağlar.

Protokol . Bu, protokolun genişləndirilməsidir üç kavramı tanıtır:

RabbitMQ. I Hissə. Giriş. Erlang, AMQP

  • exchange (değişim noktası veya borsa) — mesajların gönderildiği yerdir. Değişim noktası mesajı bir veya daha fazla kuyruğa yönlendirme yapar. O, mesajları sıralara yönləndirir yaradılan əlaqələr əsasında (binding) ile o ve kuyruk arasındaki
  • queue (kuyruk) — sabit disk veya RAM'deki bir veri yapısıdır mesajların referanslarını saklar ve mesajların kopyalarını dağıtır consumers (tüketicilere)
  • binding (bağlama) — bu kural, değişim noktasına, bu mesajların hangi kuyruklara yönlendirilmesi gerektiğini bildirir.

Protokol, TCP/IP.

Erlang hakkında kısaca

Projenin kaynak kodu, GitHubreposunda bulunmaktadır. Mimari RabbitMQ-server üzerine kurulmuştur Erlang ve BEAM.

Erlang 1980'lerin ortalarında Ericsson tarafından geliştirilmiştir dağıtık, hataya dayanıklı bir gerçek zamanlı sistem olarak, kesintisiz çalışmayı gerektiren uygulamalar için ,999 çalışma süresine sahiptir. Erlang farklı sektörlerde ve modern uygulamalarda kullanılmaktadır, örneğin WhatsApp. Detayları Facebook'un 19 milyar dolara satın aldığı WhatsApp mimarisi makalesinde bulabilirsiniz.

RabbitMQ hakkında kısaca

RabbitMQ açık kaynaklı bir mesaj aracısıdır. Mesajları, . Bu, protokolun genişləndirilməsidir belirlenen temel protokol ilkelerine göre yönlendirir. standartlara. RabbitMQ açıklanan . Bu, protokolun genişləndirilməsidir.

uygular ve geliştirir. RabbitMQ Mesajlaşma modelinin temeli, üretici (yayıncı), mesajları doğrudan kuyruğa göndermemektedir. Aslında, yayıncı çoğu zaman bir mesajın herhangi bir kuyruğa ulaşıp ulaşmayacağını bile bilmez.

Bunun yerine, yayıncı mesajları yalnızca değişime gönderebilir. Bir yandan değişim, yayıncılardan mesaj alırken, diğer yandan bu mesajları kuyruğa gönderir. Değişim, alınan mesajla ne yapılacağını kesinlikle bilmelidir. Belirli bir kuyruğa eklenmeli mi? Birden fazla kuyruğa mı eklenmeli? Yoksa mesaj göz ardı mı edilmelidir?

RabbitMQ. I Hissə. Giriş. Erlang, AMQP

İşleyiş kısaca şöyle tanımlanabilir: RabbitMQ Yayıncı, bir mesaja belirli bir değişime gönderir.

  1. Değişim, aldığı mesajı, kendisiyle kuyruk arasındaki bağlama kurallarına göre bir veya daha fazla kuyruğa yönlendirir.
  2. Kuyruk, bu mesaja olan referansı saklar. Mesajın kendisi RAM'de veya diskte saklanır.
  3. Очередь хранит ссылку на это сообщение. Само сообщение хранится в оперативной памяти или на диске
  4. İstehlakçı, növbədən mesajı almağa hazır olduqda, server mesajın bir nüsxəsini əlaqə ilə yaradır və göndərir.
  5. İstehlakçı mesajı alır və brokerə təsdiq göndərir.
  6. Broker, təsdiqi aldıqda, mesajın bir nüsxəsini növbədən silir. Sonra onu əməli yaddaşdan və diskdən çıxarır.

serverə sorğu edilməsi ilə həyata keçirilir. Sorğu

Proses RPC (uzaq prosedur çağırışı) demək olar ki, bütün nüvəyə olan qarşılıqlı əlaqələrin əsasını təşkil edir RabbitMQ. Məsələn, müştəri ilə şərtlər barədə ilkin müzakirələr, RabbitMQ, müəyyən bir prosesi göstərir. serverə sorğu edilməsi ilə həyata keçirilir. Sorğu. Bu ardıcıllıq bitdikdən sonra, RabbitMQ müştəridən tələb qəbul etməyə hazır olacaq:

RabbitMQ. I Hissə. Giriş. Erlang, AMQP

Eyni zamanda spesifikasiyada . Bu, protokolun genişləndirilməsidir həm müştəri, həm də server əmrləri çağırmaq imkanına malikdir. Bu, müştərinin serverlə qarşılıqlı əlaqəyə girməsini gözlədiyini bildirir. Əmrlər – siniflər və metodlardır. Məsələn, Connection.Start – metod çağırışıdır. Başlamaq sinfi Connection.

Bağlantı və kanallar

Beləliklə, müştəri ilə server arasında məlumat mübadiləsi üçün kanallardan istifadə olunur.. Kanallar müəyyən bir bağlantı çərçivəsində yaradılır. . Hər kanal digər kanallardan izolyasiyadır. Sinxron halda, bir cavab alınana qədər növbəti əmri yerinə yetirmək mümkün deyil.Əmrləri paralel olaraq göndərə bilmək üçün bir neçə kanal açmaq zəruridir. Hər kanal ayrı bir

proses yaradır. Bir bağlantı bir çox kanal ( Erlang çoxsaylı şəkildə istifadə). Hər kanal üçün yaddaşda müəyyən strukturlar və obyektlər mövcuddur. Buna görə də, bir bağlantı çərçivəsində daha çox kanal olduqda,RabbitMQ bu bağlantını idarə etmək üçün daha çox yaddaş istifadə edir. Ehtiyatlı bir nümunə olaraq

RabbitMQ. I Hissə. Giriş. Erlang, AMQP

kanal yaratmaq və bağlantı qurmaq üçün – yaratmaq istədiyimiz mübadilənin adıdır. Adun unikal olması tələb olunur:

// ...
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 
}

Hər əməliyyat üçün yeni bir bağlantı açmaq tövsiyə edilmir, çünki bu, böyük xərclərə səbəb olacaq.. Kanallar daimi olmalıdır, lakin çoxsaylı protokol xətaları kanalı bağlamağa səbəb olur, ona görə də kanalın ömrü bağlantıdan qısa ola bilər.

RabbitMQ harada istifadə olunur?

Mikroservis kontextində protokol . Bu, protokolun genişləndirilməsidir və onun tətbiqi RabbitMQ sistemlər arasında asinxron qarşılıqlı əlaqə üçün tez-tez istifadə olunur. Kontekstdə

IIOT protokolu serverlər arasında məlumat mübadiləsi üçün istifadə olunur (serverdən serverə). Eyni zamanda, plugin istifadə olunur . Bu, protokolun genişləndirilməsidir və onun tətbiqi RabbitMQ MQTT Plugin RabbitMQ MQTT protokolunun tətbiqi məlumatların sensor ilə server arasında aşağı sürətli mühitlərdə yüksək gecikmə ilə ötürülməsi üçün (dəstəklənən protokolların tam siyahısı Sonrakı məqalədə Exchanges ilə bağlı daha ətraflı müzakirə edəcəyik. Windows 10X, bəzi məhdudiyyətlərlə Win32 tətbiqlərini işə salmağı bacaracaq. saytında).

Salam, Habr! RabbitMQ ilə bağlı topladığım bilgiləri paylaşmaq, onları qısa tövsiyələr və nəticələr halına gətirmək istəyirəm.

Bağlantılar

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster