RabbitMQ. Hissə 1. Giriş. Erlanq, AMQP

Günortanız xeyir, Habr! Mən toplaya bildiyim bir dərslik-məlumat kitabını paylaşmaq istəyirəm RabbitMQ və qısa tövsiyələr və nəticələrə toplayın.

Mündəricat

  • RabbitMQ. Hissə 1. Giriş. Erlang, AMQP və RPC
  • RabbitMQ. Hissə 2. Mübadilələri Anlamaq
  • RabbitMQ. Hissə 3. Növbələri və Bağlamaları Anlamaq
  • RabbitMQ. Hissə 4. Mesajların və çərçivələrin nə olduğunu başa düşmək
  • RabbitMQ. 5-ci Hissə: Mesaj Performansını Nəşr etmək və İstehlak etmək
  • RabbitMQ. Hissə 6. Federasiya və Kürək Modullarına Baxış
  • RabbitMQ. Part 7. Əlaqə və Chanel haqqında təfərrüatlar
  • RabbitMQ. Hissə 8. .NET-də RabbitMQ
  • RabbitMQ. Hissə 9. Monitorinq

AMQP haqqında qısaca

AMQP (Advanced Message Queuing Protocol) sistem komponentləri arasında mesajların ötürülməsi üçün açıq protokoldur. Əsas ideya ondan ibarətdir ki, ayrı-ayrı alt sistemlər (və ya müstəqil proqramlar) marşrutlaşdırmanı həyata keçirən, ehtimal ki, çatdırılma, məlumat axınlarının paylanması, istənilən mesaj növlərinə abunəlik zəmanəti verən AMQP brokeri vasitəsilə özbaşına mesajlar mübadiləsi apara bilər.

Protokol AMQP üç anlayışı təqdim edir:

RabbitMQ. Hissə 1. Giriş. Erlanq, AMQP

  • exchange (mübadilə nöqtəsi və ya mübadilə) - ona mesajlar göndərilir. mübadilə nöqtəsi mesajı yayır bir və ya bir neçə növbədə. O mesajları növbəyə yönləndirir yaradılmış keçidlər əsasında (binding) onunla növbə arasında
  • queue (növbə) - diskdə və ya RAM-da olan məlumat strukturu mesajlara keçidləri saxlayır və mesajların surətlərini verir consumers (istehlakçılara)
  • binding (məcburi) - bir qayda ki mübadilə nöqtəsinə bu mesajların hansı növbələrə düşməli olduğunu bildirir

Protokol başa çatır TCP / IP.

Erlanq haqqında qısaca

Layihənin mənbə kodu anbarda yerləşir Github. Memarlıq rabbitmq-server əsasən Erlanq və BEAM.

Erlang şirkət tərəfindən hazırlanmışdır Ericsson 1980-ci illərin ortalarında 99,999% iş vaxtı tələb edən tətbiqlər üçün paylanmış, xətaya dözümlü, real vaxt sistemi kimi. Erlang müxtəlif sənaye sahələrində və müasir tətbiqlərdə istifadə olunur, məsələn WhatsApp. Daha ətraflı məqalədə oxuya bilərsiniz Facebook-un 19 milyard dollara aldığı WhatsApp arxitekturası

RabbitMQ haqqında qısaca

RabbitMQ açıq mənbəli mesaj brokeridir. O, mesajları protokolun bütün əsas prinsiplərinə uyğun yönləndirir AMQP -də təsvir edilmişdir spesifikasiyalar. RabbitMQ protokolu həyata keçirir və tamamlayır AMQP.

Mesajlaşma modelinin əsas ideyası RabbitMQ şeydir producer (naşir) mesajları birbaşa növbəyə göndərmir. Əslində və çox vaxt naşir mesajın hər hansı növbəyə çatdırılıb-çatdırılmayacağını belə bilmir.

Bunun əvəzinə naşir yalnız birjaya mesaj göndərə bilər. Bir tərəfdən birja nəşriyyatlardan mesajlar alır, digər tərəfdən isə onları növbələrə göndərir. Mübadilə gələn mesajla nə edəcəyini dəqiq bilməlidir. Xüsusi növbəyə əlavə edilməlidirmi? Birdən çox növbəyə əlavə edilməlidirmi? Və ya mesaja məhəl qoyulmamalıdır.

RabbitMQ. Hissə 1. Giriş. Erlanq, AMQP

Qısaca işləyin RabbitMQ aşağıdakı kimi təsvir edilə bilər:

  1. Naşir müəyyən bir mübadilə üçün mesaj göndərir
  2. Mübadilə mesajı aldıqdan sonra onu növbə ilə aralarındakı məcburi qaydalara uyğun olaraq bir və ya bir neçə növbəyə yönləndirir.
  3. Növbə bu mesaja keçidi saxlayır. Mesajın özü RAM-da və ya diskdə saxlanılır
  4. İstehlakçı növbədən mesaj almağa hazır olan kimi server istinadla mesajın surətini yaradır və göndərir.
  5. İstehlakçı mesajı alır və brokerə bildiriş göndərir
  6. Təsdiqi alan broker mesajın surətini növbədən çıxarır. Sonra RAM-dan və diskdən silinir

RPC

proses RPC (uzaqdan prosedur çağırışı) nüvə ilə demək olar ki, bütün qarşılıqlı əlaqənin əsasını təşkil edir RabbitMQ. Məsələn, müştəri şərtlərinin ilkin müzakirələri RabbitMQ, müəyyən bir prosesi göstərir RPC. Bu ardıcıllıq tamamlandıqdan sonra RabbitMQ müştərinin sorğularını qəbul etməyə hazır olacaq:

RabbitMQ. Hissə 1. Giriş. Erlanq, AMQP

Həmçinin spesifikasiyada AMQP həm müştəri, həm də server əmrlər verə bilər. Bu o deməkdir ki, müştəri serverlə əlaqə saxlamağı gözləyir. Əmrlər siniflər və üsullardır. Misal üçün, Connection.Start - metod çağırışı Start sinif Connection.

Bağlantı və kanallar

Müştəri və server arasında bu məlumat mübadiləsi üçün, kanallar. Kanallar daxilində yaradılır xüsusi əlaqə. Hər bir kanal digər kanallardan təcrid olunur. Sinxron vəziyyətdə, cavab alınana qədər növbəti əmri yerinə yetirmək mümkün deyil.

Paralel olaraq əmrlər göndərə bilmək üçün bir neçə kanal açmaq lazımdır. Hər bir kanal ayrı yaradır Erlang proses. Bir əlaqədə bir neçə kanal ola bilər (multipleksləşdirmə). Hər bir kanal üçün yaddaşda müəyyən strukturlar və obyektlər var. Buna görə də, bir əlaqə daxilində nə qədər çox kanal varsa, o qədər çox olur daha çox yaddaş RabbitMQ tərəfindən istifadə olunur belə bir əlaqəni idarə etmək.

RabbitMQ. Hissə 1. Giriş. Erlanq, AMQP

İstifadə edərək əlaqə və kanal yaratmağın sadə nümunəsi 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 
}

Hər əməliyyat üçün yeni bir əlaqənin açılması qətiyyən tövsiyə edilmir yüksək xərclərə səbəb olur. Kanalların da davamlı olması lazımdır, lakin bir çox protokol xətaları kanalın bağlanmasına səbəb olur, buna görə də kanalın ömrü bağlantıdan daha qısa ola bilər.

RabbitMQ harada istifadə olunur?

Mikroservislər kontekstində protokol AMQP və onun həyata keçirilməsi RabbitMQ üçün tez-tez istifadə olunur asinxron qarşılıqlı əlaqə xidmətlər arasında.

Kontekstdə IIOT protokol AMQP və onun həyata keçirilməsi RabbitMQ serverlər (server-server) arasında məlumat mübadiləsi üçün istifadə olunur. Həmçinin plaqindən istifadə etməklə MQTT Plugin RabbitMQ protokolun həyata keçirilməsidir MQTT aşağı sürətli, yüksək gecikmə mühitlərində sensor və server arasında məlumat ötürmək üçün (dəstəklənən protokolların tam siyahısı üçün bax: layihə saytı).

Növbəti məqalədə biz Exchanges ilə daha ətraflı başa düşməyə başlayacağıq.

References

Mənbə: www.habr.com

Добавить комментарий