目次を読む
1 RabbitMQの概要
RabbitMQは、erlangによって開発されたAMQP(Advanced Message Queue)のオープンソース実装であり、公式ウェブサイトアドレスはhttp://www.rabbitmq.comです。メッセージブローカーとして、RabbitMQは主にメッセージの受信、保存、転送を担当します。信頼できるメッセージメカニズムと柔軟なメッセージルーティングを提供し、メッセージのクラスタリングと分散展開をサポートします。アプリケーションの分離、時間のかかるタスクキュー、およびトラフィックの削減によく使用されます。シーンを待っている風水。この一連の記事では、RabbitMQの動作メカニズム、コードドライバー、およびクラスター構成を体系的に紹介します。この記事では、主に、RabbitMQのいくつかの基本的な概念、一般的に使用されるRabbitMQ制御コマンドを紹介し、最後にC#によって駆動される簡単なクリを作成します。まず、RabbitMQの基本構造を見てみましょう。
上の画像はRabbitMQの基本的な構造です。プロデューサーとコンシューマーはどちらもRabbitMQのクライアントです。プロデューサーはメッセージの送信を担当し、コンシューマーはメッセージの消費を担当します。
次に、この図を組み合わせて、RabbitMQのいくつかの概念を理解します。
ブローカー(サーバー):クライアント接続を受け入れ、AMQPメッセージキューとルーティング機能を実現するプロセスブローカーをRabbitMQサーバーと呼ぶことができます。
仮想ホスト:仮想概念仮想ホストには、主にアプリケーションの権限制御と分離に使用されるいくつかのExchangeとキューが存在する可能性があります。アプリケーションAがVhostAを使用し、アプリケーションBがVhostBを使用する場合、アプリケーションAのエクスチェンジ、キュー、メッセージのみをVhostAに格納します。アプリケーションAのユーザーはVhostAにのみアクセスでき、VhostBのデータにはアクセスできません。
Exchange:プロデューサーから送信されたメッセージを受け入れ、バインディングルールに従ってサーバーのキューにメッセージをルーティングします。ExchangeTypeは、Exchangeルーティングメッセージの動作を決定します。たとえば、RabbitMQには、Direct、Fanout、Topic、Headerの4つのExchangeTypeがあります。Exchangeルーティングルールの種類は異なります(これらについては後で詳しく説明します)。
キュー:メッセージキューは、コンシューマが消費していないメッセージを格納するために使用されます。キューは先入れ先出しです。デフォルトでは、最初に格納されたメッセージが最初に処理されます。
メッセージ:ヘッダーと本文で構成されるメッセージです。ヘッダーは、メッセージが永続化されるかどうか、Message Queueが受け入れるかどうか、優先順位など、プロデューサーによって追加されるさまざまな属性のコレクションです。本文は実際に送信されるデータです。コンテンツの形式はbyte []です。
接続:RabbitMQの場合、接続は実際にはクライアントとブローカー間のTCP接続です。
Channel:Channel。クライアントとブローカー間の接続のみが作成された後は、クライアントはメッセージを送信できません。チャネルは、接続に基づいて作成する必要があります。AMQPプロトコルでは、AMQPコマンドはチャネルを介してのみ実行できると規定されています。接続には複数のチャネルを含めることができます。TCP接続の確立と解放には非常にコストがかかるため、チャネルが必要です。
2 RabbitMQのインストール
RabbitMQはerlang言語で開発されているため、RabbitMQをインストールする前にerlangサポートをインストールする必要があります。
1 Windowsプラットフォームのインストール
1 erlangをインストールする
最初にerlangをダウンロードして最新バージョンを直接ダウンロードします。現在のダウンロードはOTP 21.3 Windows 64ビットバイナリファイルです。ダウンロードが完了したら、次の手順でインストールできます。
2 RabbitMQをインストールする
WindowsプラットフォームにRabbtMQを ダウンロードします。現在のダウンロードはrabbitmq-server-3.7.14.exeです。ダウンロードが完了したら、次の手順でインストールできます。
3 Web管理プラグインをインストールする
RabbitMQコマンドプロンプトを開き、コマンドrabbitmq-plugins enable rabbitmq_managementを実行して、Web監視プラグインのインストールを完了します。
インストールが完了したら、ブラウザーを開いてhttp://127.0.0.1:15672/を入力し、デフォルトのアカウント[name:guest / password:guest]を使用してログインします。インターフェースは次のとおりです。このUIプラグインを使用すると、RabbitMQ(exchange )、キューおよびその他のコンテンツ、Exchange、キュー、およびユーザーを追加、変更、および削除することもできます。
この時点で、RabbitMQのWindowsプラットフォームのインストールは完了しています。次のように、サービスマネージャーを開きます。RabbitMQは既に正常に実行されています。
2 CentosはRabbitMQをインストールします
1 RabbitMQをインストールする
ここでの仮想マシンシステムはCentos7で、採用されているインストール方法はyumインストールです。簡単にするために、公式のerlangとRabbitMQサーバーの自動インストールスクリプト(公式のインストールドキュメント)を直接使用し、次のコードを1行ずつ実行してerlangをインストールします。そしてRabbitMQ。
#Install socat yum install socat #Install erlang curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash yum -y install erlang #Install rabbitmq-server curl -s https ://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash yum -y install rabbitmq-server #Start rabbitmq service systemctl start rabbitmq-server #Add web management plug-in rabbitmq-plugins enable rabbitmq_management
補足:インストールの完了後、RabbitMQ実行コマンドが特に遅い場合、またはエラーが発生した場合(rabbitmqがノードxxx @ xxxで操作を実行できません)、解決策:
ホストを編集し、コマンドvim / etc / hostsを実行し、ローカルIP(または仮想マシンIP)を追加します
コマンドを実行した後、ブラウザーを使用してhttp://127.0.0.1:15672/にアクセスすると、Web管理インターフェースも表示されます。上記のインストール手順でインストールされたRabbitMQはUnitファイルを生成するため、Systemdを使用してRabbitMQサービスを管理できます。
#RabbitMQ サービスを開始しますsystemctl start rabbitmq-server #RabbitMQ サービスを 停止しますsystemctl stop rabbitmq-server #RabbitMQの 実行ステータスを 表示しますsystemctl status rabbitmq-server #RabbitMQ サービスを 再起動しますsystemctl restart rabbitmq-server
2 RabbitMQコントロールツール
RabbitMQの一般的な機能のほとんどは、Web管理インターフェイスを使用して実現できますが、RabbitMQアプリケーションの開閉やクラスター管理など、一部の機能はWebUIでは実現できません。RabbitMQコントロールは、RabbitMQのすべての組み込み関数を呼び出すことができるRabbitMQのコマンドライン管理ツールです。メインコマンドはrabbitmqctlです。以下は、ユーザーリストを照会するコマンドです。実行するには、sbinディレクトリに切り替える必要があることに注意してください。
RabbitMQコントロールツールを便利に使用するには、環境変数を追加することをお勧めします。Windowsがデフォルトでインストールされている場合は、PATHに追加します:C:\ Program Files \ RabbitMQ Server \ rabbitmq_server-3.7.14 \ sbin、デフォルトでインストールされていない場合は、対応するインストールディレクトリにPATHを追加します。上記のインストール方法によると、Centosは追加の設定なしでRabbitMQコントロールツールを直接使用できます。RabbitMQコントロールツールの詳細については、RabbitMQコントロールの公式ドキュメントを参照してください。
以下は、最も一般的に使用されるいくつかのRabbitMQ制御コマンドの要約です。関心のある友人がこれらのコマンドを実行しようとする場合があります。たとえば、コマンドラインツールでコマンドrabbitmqctl add_user <username> <password>を使用して、新しいユーザーを追加します。
1基本的な制御コマンド
基本的な制御コマンドは、主にアプリケーション、ランタイムなどの起動と停止に使用されます。
#RabbitMQのとランタイム停止 rabbitmqctlはシャットダウン 停止のerlangノード# rabbitmqctl停止 #イネーブルRabbitMQの rabbitmqctl start_app #ストップのRabbitMQ rabbitmqctlのstop_appの #は、ステータス表示 rabbitmqctlステータス #閲覧環境 rabbitmqctl環境が 初期状態に戻す#rabbitmq、内部交換・キューがクリアされ rabbitmqctlリセットを
2サービス状態管理
これらのコマンドは、主に交換、チャネル、バインディング、キュー、コンシューマを表示するために使用されます。
#キュー情報に戻るlist_queues [-p <vhostpath>] [<queueinfoitem> ...] # 交換情報に戻るlist_exchanges [-p <vhostpath>] [<exchangeinfoitem> ...] # バインディング情報に戻るlist_bindings [- p <vhostpath>] [< bindinginfoitem > ...] # リンク情報を返すlist_connections [<connectioninfoitem> ...] # 現在のすべてのチャネルを返すlist_channels [<channelinfoitem> ...] # コンシューマを返すlist_consumers [-p <vhostpath >]
3ユーザー管理コマンド
これらのコマンドは、主にユーザーの追加、変更、削除、およびユーザー権限の管理に使用されます
#rabbitmqの内部データベースにユーザーを追加する add_user <username> <password> #ユーザーを削除 する delete_user <username># ユーザーパスワードを 変更するchange_password <username> <newpassword> # ユーザーパスワードを消去し、ユーザーログインを禁止するclear_password <username># ユーザータグを設定する、ユーザーの役割を設定することです set_user_tags <ユーザー名> <タグ> #ビューのユーザリスト list_users #Create Aバーチャルホスト add_vhost <vhostpath> #DELETE Aバーチャルホスト delete_vhost <vhostpath> #List バーチャルホストlist_vhosts [<vhostinfoitem> ...] #For Aバーチャルホストをユーザーに関連する権限を付与します set_permissions [-p <vhostpath>] <user> <conf> <write> <read> #vhostで のユーザーの権限をクリアclear_permissions [-p <vhostpath>] <username> #vhostで すべてのユーザーの権限を一覧表示 list_permissions [-p <vhostpath>]# ユーザーのアクセス許可を 一覧表示しますlist_user_permissions <username>
4つのクラスター管理コマンド
#clusternodeはノードの名前を示し、-ramはノードがramノードとしてクラスターに参加することを示します。デフォルトでは、ノードはディスクノードとしてクラスターに参加します。ノードがクラスターに参加する前に、ノードのrabbitmqアプリケーションを停止する必要があります。つまり、最初にstop_appを実行する必要があります。 join_cluster <clusternode> [--ram]# クラスター内のすべてのノードを表示します cluster_status # クラスター名を設定しますset_cluster_name <clustername> # クラスター名を変更しますrename_cluster_node <oldname> <newname># クラスター内のノードのモードを変更します、ノードは変換前です最初に停止する必要があります。また、クラスター内の唯一のディスクノードをramノードに変換できません change_cluster_node_type <disc | ram> # ノードをリモートで削除し、rabbitmqctl forget_cluster_node rabbit @ rabbit1#同期 ミラーキュー sync_queue <queuename>を削除する前にノードを停止する必要があります # 同期キューのキャンセルcancel_sync_queue <queuename> # キュー内のすべてのメッセージを空にするpurge_queue [-p vhost] <queuename>
ここにリストされているコマンドの多くは、クラスター制御関連のコマンドなど、この段階では使用されません。これらのコマンドの使用法については、次の章で徐々に理解していきます。