、MQはメッセージキュー、メッセージキュー(MQ)と呼ばれます
アプリケーションへのアプリケーションの通信方法。アプリケーションは、メッセージを介して(アプリケーションプログラムのためのデータ)を通信するキューから読み出さそれらをリンクするための専用の接続を必要とせずに、。
送信されるデータメッセージのプログラムの間の通信を通過させるメッセージを指す互いに通信することはなく、直接呼び出しを介して、一般に、リモート・プロシージャ・コールとして、直接呼ばれる技術です。
これは、通信するためにキューによってアプリケーションキューを参照します。同時に実行されるアプリケーション受信キューと送信要求を使用して除去しました。
二、AMQP即アドバンストメッセージキュープロトコル
高度なメッセージキュープロトコルは、メッセージ指向ミドルウェアの設計のためのオープンな標準のアプリケーション層のプロトコルです。コンポーネント間のデカップリングのために主にメッセージミドルウェア、ユーザのプレゼンス情報を知らなくても、メッセージの送信者、およびその逆。
AMQP主な機能は、キューのメッセージ、ルーティングされ(点を含むとパブリッシュ/サブスクライブ)、信頼性、安全性。
三、RabbitMQのコンセプト:
人気のあるオープンソースのシステムメッセージキューに属します。標準を達成するためにAMQP(アドバンスト・メッセージキュープロトコル)に属します。オープン標準のアプリケーション層プロトコルは、メッセージ指向ミドルウェアの設計がされています。分散ストアアンドフォワードメッセージ用のシステムでは、使いやすさの観点から、スケーラビリティ、高可用性、およびとてもよくやって。
RabbitMQの特徴:
使用Erlangで書かれた
サポートの永続化
サポートHAは、
C#の、アーラン、ジャワ、perlの提供 、のpython、ルビーや他のクライアント側の開発を
第四に、カップリング、デカップリングは何ですか
カップリング
1は、結合は、二つ以上のシステム間を意味する、または両方の形式の動きは現象によって一緒に互いに相互作用ならびに影響を及ぼす。
図2は、ソフトウェア工学において、オブジェクト間のオブジェクトの依存関係との間の結合の程度です。オブジェクト間の高いカップリング、高い維持費、そのデザインは、オブジェクトクラスとメンバー間の結合を最小限に抑える必要があります。
3、分類:ソフトウェア・モジュールとの間の結合、ならびにハードウェアとソフトウェアとの間の結合があります。カップリングは、様々なモジュール間の結合のプログラム構造の尺度です。これは、各モジュール間のインターフェイス、呼び出しモジュールおよびインターフェイスを介してどのような情報の方法の複雑さに依存します。
第二に、デカップリング
1を、デカップリングは、文字通りの関係を切り離すことを意味します。
ソフトウェア工学2、結合度を低減するためには理解することができるデカップリング、すなわち、モジュールカップリングの間に依存関係が存在しなければならないように、カップリングはゼロ理論的に絶対に不可能であるが、結合の程度を低減するために、従来の方法によって同定することができます最小限に。
3、核となるアイデアの設計:コードの結合を最小限に抑えるためには、コードが見つかっ結合されている場合、デカップリング技術を取ることが必要です。データモデル、ビジネスロジックと相互に接続された3つの下の表示の間で意見を聞かせて、関連性を最小限に依存しているため、全体としての状況には影響しません。コードの主な特徴は、二つの間の相互作用を必要に応じて、メッセージ、またはフレームワークのも導入により、インターフェースを介して、機能コードBに書き込まれたが、要するに、直接クロス書き込むことはないれていません。
五、RabbitMQの概念的
ブローカーは:単純にメッセージキューサーバエンティティ。?
為替:メッセージスイッチは、キューにルーティングされているどのようなルールに従ってメッセージを指定します。?
キュー:メッセージキューキャリア、各メッセージは、1つ以上のキューに入れられます。? 結合:結合、その役割は、規則に従ってルーティングおよびキューバインドを交換することです。
?キールーティング:キーワードは、このキーワードに基づいて配信されるメッセージの交換をルーティングします。
?バーチャルホスト:Webホスティング、別のユーザーの特権分離として、複数のバーチャルホストを設定することができブローカー。
プロデューサー:ニュースのプロデューサーは、あるプログラムがメッセージを配信しました。?
消費者:消費者のニュースは、プログラムがメッセージを受け入れることです。?
チャンネル:各クライアントの接続のメッセージチャネルは、複数のチャネル、作成することができ、会話タスクを表す各チャンネルを?。
六、RabbitMQの作業管理
MQ消費-典型的なプロデューサー、終了メッセージキューにメッセージを書き込むために継続すると、もう一方の端を表すモデルの読み取りまたはキュー内のメッセージをサブスクライブすることができます。MQは、具体的なフォローのAMQPプロトコルの実装や製品です。プロジェクトでは、いくつかの時間のかかる操作をせずに直ちに戻り、大きく、それによってシステムのスループットを増加させる、要求をサーバの応答時間を節約このように非同期処理と非同期処理を行い抽出しました。
(1)メッセージキュークライアントは、チャネルを開くために、サーバーに接続します。?
(2)宣言クライアント交換、および関連するプロパティを提供します。?
(3)クライアントは、キューを宣言し、関連するプロパティを設定します。?
(4)クライアントは、ルーティングキーを使用して、交換と結合キューの間の良好な関係を確立します。
?(5)クライアントの交換にメッセージを投稿。?
(6)Exchangeはメッセージに従って、メッセージを受信し、キー結合した後に、設定された?OKメッセージルーティング、メッセージの一つ以上のキューに配信します
七、メタデータのRabbitMQの(メタデータ)
メタデータはRAMディスクにまたは永続することができ RabbitMQのは、クラスタ内の2つのノードに分割することができ、この角度から。:RAMおよびノードのディスクノード。
RAMに保存されているRAMのみのノードのメタデータ
ディスクノードのメタデータがディスクに永続化されます。
シングルノードシステムは、ディスクノードをできるように、任意の選択ではない、またはデータの冗長性がないため、一度すべての設定情報が失われます再起動しますが、RAMのノードであるノードを選択することができ、クラスタ環境インチ、クラスタ内の宣言(宣言します) :すべてのノードが返されます作成が完了するまで、交換キュー結合、このような操作を作成し
、それはメモリノードのメモリデータを変更する必要がある場合、
それはディスクのディスクノードへの書き込みを待つ必要がある場合は、ここではノード過度の速度が大幅になりますスローダウン。
いくつかのシーンexchangキューがほぼ一定、非常に少ない、および使用RabbitMQのは、RPCを行う場合は、すべてのディスクノードは、効果がない場合でも、それを変更(RPC:リモートプロシージャCall-リモートプロシージャコール)。、RPCまたはRPCのようなシーン、この深刻な問題頻繁に破壊が一時キューを作成し、ディスクの読み書きのスキルはすぐにパフォーマンスのボトルネックになります。そのため、ほとんどのケースでは、我々はRAMノードのノードを作成してみてください。ここで問題があり、メタデータクラスタを再起動するために、クラスタのメタデータを復元する必要があるかもしれません、それはRabbitMQのクラスタを計画する必要があり、ディスクに永続化RAMノードとディスクのノード。
ノードは、他のものはRAMノードクラスタノードが参加したり、特定のから撤退することができることができる一つのディスク限りクラスタ:限りがあるので、ノードディスクノードがディスクのRabbitMQ実際、このような要求に書き込まれたクラスタ・メタデータのための条件を提供することができるであろう少なくともクラスタ内のディスクノードに通知します。
クラスタディスクノードなど、ユーザーの追加、ユーザーのアクセス権を変更するクラスタ。免責事項交換キューのメタデータを変更しない、離れてぐずぐずしている場合、これらの変更は、ノードの再起動後に回復することはできません。
状況は、すべてのディスクノードの追加、オンラインを操作したり、最新のクラスタメタデータをダウンロードするには事前に定義されたディスクノードに接続されたときに.RAMノードが開始されるノードを除去するためにケースのようにする必要があります。あなたは、2枚のディスクを持っている場合ノード(D1 D2の)RAMノードを追加するとき、RAMのノードは、あなただけのD1を伝え、およびD1が起動しないだけで、このRAMのノードの再起動、再起動が失敗します参加したとき。そう、すべてのディスクのノード情報を伝えるためにそれは、ノードのディスクノード情報は、あなたが欲しいものを見つけることができ、その後の起動用ディスクに永続化されるRAMます。
八、RabbitMQのクラスタの展開
192.168。253.135 BB 192.168。253.171 AA 192.168。253.153 CC
yumをインストール-yアーランrabbitmq- server.noarch systemctlのRabbitMQを有効にする - server.service のRabbitMQを開始systemctl - server.service systemctl状態RabbitMQの -server.service
rabbitmqctlのCHANGE_PASSWORDゲストの管理#は、パスワードadminを変更し、ユーザー名は、数字で始めることはできません
ノード1: rabbitmqctlのADD_USERママADMINの rabbitmqctl set_permissionsママ"* " "* " " *。" rabbitmqctl set_user_tagsママの管理者の 管理者がログインすることができます設定してください#
RABBITMQ_NODE_PORT = 5672 のulimit -S -n 4096 RABBITMQ_SERVER_ERL_ARGS = " + K真+ A30 + P 1048576 -kernel inet_default_connect_options [{NODELAY、真}、{生、6,18、<< 5000:64 /ネイティブ>>}] -kernel inet_default_listen_options [{生、6,18、<< 5000:64 /ネイティブ>>}] 」 RABBITMQ_NODE_IP_ADDRESS = 192.168.253.135
SCPの/etc/rabbitmq/rabbitmq-env.confのAA:の/ etc / RabbitMQの/
SCP /etc/rabbitmq/rabbitmq-env.conf CC:の/ etc / RabbitMQの/
/ usr / libに/ RabbitMQの/ binに/ RabbitMQの-プラグイン一覧
RabbitMQの-プラグインはrabbitmq_managementを有効にします
SCP / VARの /lib/rabbitmq/.erlang.cookieのAA:/ VAR / libに/ RabbitMQの/ .erlang.cookie SCP / VARの /lib/rabbitmq/.erlang.cookieのCC:/ VARの /lib/rabbitmq/.erlang.cookie
systemctl再起動rabbitmq- server.service rabbitmqctl stop_app rabbitmqctl join_cluster - ラム BB @ウサギ rabbitmqctlのstart_app
rabbitmqctl stop_app
rabbitmqctlのchange_cluster_node_typeの ディスク(RAM)
ノードのRAMを回す... INTOウサギの@ CC
エラー:. Mnesiaはまだノードにウサギ@ CCを実行している上にある
。アプリケーションを停止する必要性を見ることができる最初の#rabbitmqctlのstop_appでノードを停止してください
再度、実行を停止した後、
[ルート@ CCはRabbitMQの]#1 rabbitmqctlのchange_cluster_node_typeラム
ラムノードにウサギ@ CCを回します...
rabbitmqctlのstart_app
stop_appのrabbitmqctlの
rabbitmqctl RESET
----「ノードウサギ@ CCをリセット...
[ルート@ CCはRabbitMQの]#のrabbitmqctlのcluster_status#が発見CCのステータスは、クラスタノードのまま表示
ウサギ@ CCを...ノードのクラスタの状態を
[、[{ノードディスク{ [ウサギの@ CC]}]}、 クラスタノードから逸脱#が自動的にディスクの方法は、以下の理由になります。1
{running_nodes、[ウサギの@ CC]}、{CLUSTER_NAME、<< "ウサギの@ CC" >>}、#および他のノード名は、クラスタ内で記載されていない
{パーティション、[]}、
{アラーム、[{ウサギ@ CCを、[]}]}]
rabbitmqctlのforget_cluster_nodeウサギの@ノード3の
rabbitmqctlリセット
rabbitmqctl start_app
rabbitmqctl cluster_status