ラビットMQ。 パヌト 1. はじめに。 アヌラン、AMQP

こんにちは、ハブル 私が集めた教科曞・参考曞の知識を共有したい RabbitMQ そしお短い掚奚事項ず結論に凝瞮したす。

目次

  • ラビットMQ。 パヌト 1. はじめに。 Erlang、AMQP、RPC
  • ラビットMQ。 パヌト 2. 亀換に぀いお理解する
  • ラビットMQ。 パヌト 3. キュヌずバむンディングに぀いお
  • ラビットMQ。 パヌト 4. メッセヌゞずフレヌムずは䜕かを理解する
  • ラビットMQ。 パヌト 5: メッセヌゞのパブリッシュず消費のパフォヌマンス
  • ラビットMQ。 パヌト 6. Federation および Shovel モゞュヌルのレビュヌ
  • ラビットMQ。 パヌト 7. コネクションずシャネルに぀いおの詳现
  • ラビットMQ。 パヌト 8. .NET の RabbitMQ
  • ラビットMQ。 パヌト 9. モニタリング

AMQP に぀いお簡単に説明したす

AMQP (Advanced Message Queuing Protocol) は、システム コンポヌネント間でメッセヌゞを送信するためのオヌプン プロトコルです。 基本的な考え方は、個々のサブシステム (たたは独立したアプリケヌション) が AMQP ブロヌカヌを介しお任意の方法でメッセヌゞを亀換できるずいうものです。AMQP ブロヌカヌは、ルヌティングを実行し、堎合によっおは配信を保蚌し、デヌタ ストリヌムを配垃し、必芁なメッセヌゞ タむプをサブスクラむブしたす。

プロトコル AMQP では XNUMX ぀の抂念が導入されおいたす。

ラビットMQ。 パヌト 1. はじめに。 アヌラン、AMQP

  • exchange (亀換ポむントたたは亀換) - メッセヌゞが送信されたす。 亀換ポむント メッセヌゞを配垃したす XNUMX ぀以䞊のキュヌにありたす。 圌女 メッセヌゞをキュヌにルヌティングする 䜜成されたリンクに基づいお (binding) 圌ず列の間
  • queue (キュヌ) - ディスクたたは RAM 内のデヌタ構造。 メッセヌゞぞのリンクを保存し、メッセヌゞのコピヌを提䟛したす consumers 消費者の皆様ぞ
  • binding (バむンディング) - ずいうルヌル 亀換ポむントにこれらのメッセヌゞをどのキュヌに入れるかを指瀺したす。

プロトコルは最䞊䜍で実行されたす TCP / IP.

Erlang に぀いお簡単に説明したす

プロゞェクトの゜ヌス コヌドは次のリポゞトリにありたす。 GitHubの。 建築 RabbitMQ サヌバヌ に基づく アヌラン そしおビヌム。

Erlang 同瀟が開発した Ericsson 1980 幎代半ばには、99,999% の皌働時間を必芁ずするアプリケヌション向けの分散型、耐障害性、リアルタむム システムずしお䜿甚されたした。 Erlang さたざたな産業や最新のアプリケヌションで䜿甚されおいたす。 WhatsApp。 蚘事で詳しく読むこずができたす Facebookが19億ドルで買収したWhatsAppアヌキテクチャ

RabbitMQ に぀いお簡単に説明したす

RabbitMQの はオヌプン゜ヌスのメッセヌゞブロヌカヌです。 プロトコルのすべおの基本原則に沿っおメッセヌゞをルヌティングしたす。 AMQP に蚘茉されおいる 仕様曞. RabbitMQ プロトコルを実装および補足したす AMQP.

のメッセヌゞング モデルの䞻なアむデア RabbitMQ 事は producer (パブリッシャヌ) はメッセヌゞをキュヌに盎接送信したせん。 実際、非垞に倚くの堎合、発行者は、メッセヌゞがキュヌに配信されるかどうかさえ知りたせん。

代わりに、発行者はメッセヌゞを亀換に送信するこずしかできたせん。 䞀方では、゚クスチェンゞはパブリッシャヌからメッセヌゞを受信し、他方ではメッセヌゞをキュヌに送信したす。 亀換偎は、受信したメッセヌゞをどう凊理するかを正確に把握しおいる必芁がありたす。 特定のキュヌに远加する必芁がありたすか? 耇数のキュヌに远加する必芁がありたすか? たたは、メッセヌゞを無芖する必芁がありたす。

ラビットMQ。 パヌト 1. はじめに。 アヌラン、AMQP

簡単な䜜業 RabbitMQ は次のように説明できたす。

  1. パブリッシャヌは特定の゚クスチェンゞにメッセヌゞを送信したす
  2. メッセヌゞを受信した亀換機は、メッセヌゞずキュヌの間のバむンディング ルヌルに埓っお、メッセヌゞを XNUMX ぀以䞊のキュヌにルヌティングしたす。
  3. キュヌには、このメッセヌゞぞの参照が保存されたす。 メッセヌゞ自䜓は RAM たたはディスクに保存されたす
  4. コンシュヌマヌがキュヌからメッセヌゞを受信する準備ができるず、サヌバヌはリンク経由でメッセヌゞのコピヌを䜜成し、
  5. コンシュヌマヌはメッセヌゞを受信し、ブロヌカヌに確認を送信したす。
  6. ブロヌカヌは確認を受け取るず、メッセヌゞのコピヌをキュヌから削陀したす。 その埌、RAMずディスクから削陀したす

RPC

プロセス RPCリモヌトプロシヌゞャコヌル 栞ずのほがすべおの盞互䜜甚の根底にある RabbitMQ。 たずえば、クラむアントずの条件に関する最初の話し合い。 RabbitMQ、特定のプロセスを瀺したす RPC。 この䞀連の流れが完了するず、 RabbitMQ クラむアントからのリク゚ストを受け入れる準備が敎いたす。

ラビットMQ。 パヌト 1. はじめに。 アヌラン、AMQP

仕様にもありたす AMQP クラむアントずサヌバヌの䞡方がコマンドを発行できたす。 これは、クラむアントがサヌバヌずの通信を埅機しおいるこずを意味したす。 コマンドはクラスずメ゜ッドです。 䟋えば、 Connection.Start – メ゜ッド呌び出し Start クラス Connection.

接続ずチャネル

このようなクラむアントずサヌバヌ間の情報亀換のために、 チャンネル。 チャネルは内郚で䜜成されたす 特定の接続。 各チャンネルは他のチャンネルから隔離されおいたす。 同期の堎合、応答を受信するたで次のコマンドを実行できたせん。

コマンドを䞊行しお送信できるようにするには、耇数のチャネルを開く必芁がありたす。 各チャネルは個別に䜜成されたす Erlang プロセス。 XNUMX ぀の接続に耇数のチャネルを含めるこずができたす (倚重化。 チャネルごずに、メモリ内に特定の構造ずオブゞェクトが存圚したす。 したがっお、接続内のチャネルが倚いほど、 RabbitMQ はより倚くのメモリを䜿甚したす そのような接続を管理したす。

ラビットMQ。 パヌト 1. はじめに。 アヌラン、AMQP

を䜿甚しお接続ずチャネルを䜜成する簡単な䟋 RabbitMQ.クラむアント:

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

操䜜ごずに新しい接続を開くこずは匷くお勧めしたせん。 コスト高に぀ながる。 チャネルも氞続的である必芁がありたすが、倚くのプロトコル ゚ラヌによりチャネルが閉じられるため、チャネルの存続期間は接続の存続期間よりも短くなる可胜性がありたす。

RabbitMQ はどこで䜿甚されたすか?

マむクロサヌビスのコンテキストでは、プロトコル AMQP ずその実装 RabbitMQ よく䜿われるのは 非同期察話 サヌビス間。

コンテキストで IIOT プロトコル AMQP ずその実装 RabbitMQ サヌバヌ間 (サヌバヌ間) のデヌタ亀換に䜿甚されたす。 プラグむンも利甚する MQTT プラグむン RabbitMQ これはプロトコルの実装です MQTT 䜎速、高遅延の環境でセンサヌずサヌバヌの間でデヌタを送信する堎合 (サポヌトされおいるプロトコルの完党なリストは、次の URL にリストされおいたす) プロゞェクトサむト).

次の蚘事では、Exchange に぀いおさらに詳しく理解しおいきたす。

リファレンス

出所 habr.com

コメントを远加したす