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:

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ındakiqueue(kuyruk) — sabit disk veya RAM'deki bir veri yapısıdır mesajların referanslarını saklar ve mesajların kopyalarını dağıtırconsumers(tüketicilere)binding(bağlama) — bu kural, değişim noktasına, bu mesajların hangi kuyruklara yönlendirilmesi gerektiğini bildirir.
Protokol, .
Erlang hakkında kısaca
Projenin kaynak kodu, reposunda bulunmaktadır. Mimari üzerine kurulmuştur ve BEAM.
Erlang1980'lerin ortalarındaEricsson tarafından geliştirilmiştirdağıtık, hataya dayanıklı bir gerçek zamanlı sistem olarak, kesintisiz çalışmayı gerektiren uygulamalar için ,999 çalışma süresine sahiptir.Erlangfarklı sektörlerde ve modern uygulamalarda kullanılmaktadır, örneğin
RabbitMQ hakkında kısaca
açık kaynaklı bir mesaj aracısıdır. Mesajları, belirlenen temel protokol ilkelerine göre yönlendirir. . 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?

İşleyiş kısaca şöyle tanımlanabilir: RabbitMQ Yayıncı, bir mesaja belirli bir değişime gönderir.
- Değişim, aldığı mesajı, kendisiyle kuyruk arasındaki bağlama kurallarına göre bir veya daha fazla kuyruğa yönlendirir.
- Kuyruk, bu mesaja olan referansı saklar. Mesajın kendisi RAM'de veya diskte saklanır.
- Очередь хранит ссылку на это сообщение. Само сообщение хранится в оперативной памяти или на диске
- İ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.
- İstehlakçı mesajı alır və brokerə təsdiq göndərir.
- 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 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:

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əRabbitMQ bu bağlantını idarə etmək üçün daha çox yaddaş istifadə edir. Ehtiyatlı bir nümunə olaraq

kanal yaratmaq və bağlantı qurmaq üçün :
// ...
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 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ı Windows 10X, bəzi məhdudiyyətlərlə Win32 tətbiqlərini işə salmağı bacaracaq. ).
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
