12.2. リンクルートの作成
リンクルートは、送信元と受信側間のプライベートメッセージングパスを表し、ルーターは終了点間でメッセージを渡します。クライアントをサービス (ブローカーキューなど) に接続するために使用できます。
12.2.1. リンクルーティングについて
リンクルーティングは、ブローカー化されたメッセージングの代替ストラテジーを提供します。リンクルートは、送信元と受信側間のプライベートメッセージングパスを表し、ルーターは終了点間でメッセージを渡します。リンクルートは、ルーターネットワークを介して送信元から受信側を通過する仮想接続または tunnel と考えることができます。
リンクルーティングにより、ルーティングはリンク接続フレームで実行され、送信者および受信側を直接接続する仮想メッセージングパスを形成します。リンクルートが確立されると、メッセージの配信、フローフレーム、破棄の転送がリンクルート全体で実行されます。
12.2.1.1. リンクルーティングのフロー制御
リンクルーティングとは異なり、送信側および受信側はフロー制御を直接処理します。受信側は、受信できるメッセージの数であるリンククレジットを付与します。ルーターは送信側に直接送信し、受信側が付与されたクレジットに基づいてメッセージを送信します。
12.2.1.2. リンクルートアドレス
リンクルートアドレスは、ブローカーキュー、トピック、またはその他のサービスを表します。クライアントがリンクルートアドレスをルーターに割り当てると、ルーターはアドレスで識別されるブローカーリソースへのリンクを伝播します。
リンクルートアドレスを使用して、ルーターネットワークは集約されたメッセージ分散に参加しません。ルーターは単に 2 つの終了ポイント間でメッセージの配信とセットを渡します。
12.2.1.3. リンクルーティングのルーティングパターン
ルーティングパターンは、送信者と受信者との間に直接リンクがあるため、リンクルーティングとは使用されません。ルーターは、最初のリンク接続要求フレームを受信する場合にのみルーティングの決定を行います。リンクが確立されたら、ルーターは分散したディストリビューションのリンクとメッセージを渡します。
12.2.2. リンクルートの作成
リンクルートは、送信元とルーターを通過する受信側間のリンクを確立します。着信リンクと発信リンクルートを設定し、ルーターがクライアントからリンク接続を受信し、特定の宛先に送信することができます。
リンクルーティングでは、クライアントトラフィックはルーターではなくブローカーで処理されます。クライアントには、ルーターからブローカーのキューへの直接のリンクがあります。そのため、各クライアントは個別のプロデューサーまたはコンシューマーです。
ブローカーへの接続に失敗すると、ルーティングされたリンクがデタッチされ、ルーターはブローカー (またはバックアップ) への再接続を試みます。接続が再確立されると、ブローカーへのリンクルートが再度到達可能になります。
クライアントの視点からは、クライアントは切り離されたリンク (送信者またはレシーバー) を認識しますが、失敗した接続ではありません。したがって、ブローカー接続障害が発生した場合に、クライアントがリンクを再アタッチする場合は、クライアントでこの機能を設定する必要があります。または、リンクルーティングの代わりに、自動リンクでメッセージルーティングを使用できます。詳細は、「ブローカーキューによるメッセージのルーティング」 を参照してください。
手順
ブローカーに外向き接続がない場合は、その接続を追加します。
キューが複数のブローカーにシャードされている場合は、各ブローカーの接続を追加する必要があります。詳細は、「外部 AMQP コンテナーへの接続」 を参照してください。
クライアントがローカルトランザクションをブローカーに送信する場合は、トランザクションコーディネーターのリンクルートを作成します。
linkRoute { prefix: $coordinator 1 connection: my_broker direction: in }
- 1
$coordinator
接頭辞は、このリンクルートをトランザクションコーディネーターとして指定します。クライアントがトランザクションセッションを開くと、トランザクションの開始および終了リクエストは、ブローカーへのこのリンクルートと共に伝播されます。
AMQ Interconnect では、複数のブローカーへのトランザクションのルーティングはサポートされません。環境に複数のブローカーがある場合は、単一のブローカーを選択し、すべてのトランザクションをそのブローカーにルーティングします。
クライアントがこのリンクルートにメッセージを送信するには、受信リンクルートを作成します。
linkRoute { prefix: my_queue connection: my_broker direction: in ... }
prefix
|pattern
ルーティングされたリンク添付の宛先となるブローカーキューに一致するアドレス接頭辞またはパターン。この接頭辞またはパターンに一致するメッセージはすべて、リンクルートとともに分散されます。接頭辞を指定して、アドレスの正確なアドレスまたは開始セグメントと一致するように指定できます。または、ワイルドカードを使用してアドレスに一致するパターンを指定できます。
接頭辞は、
.
または/
文字のいずれかで区切られたアドレス内の正確なアドレスまたは最初のセグメントと一致します。たとえば、接頭辞my_address
は、my_address
とmy_address.1
およびmy_address/1
のアドレスと一致します。ただし、my_address1
と一致しません。パターンは、パターンに対応するアドレスと一致します。パターンは、
.
または/
のいずれかで区切られた単語シーケンスです。ワイルドカード文字を使用して単語を表すことができます。*
文字は 1 つの単語にマッチし、#
文字はゼロ以上の単語のシーケンスと一致します。*
および#
文字はワイルドカードとして予約されています。したがって、メッセージアドレスでは使用しないでください。アドレスパターンの作成に関する詳細は、「アドレスパターンの一致」 を参照してください。
注記prefix
値をpattern
に変換するには 、/#
をそれに追加します。たとえば、接頭辞a/b/c
は、パターンa/b/c/#
と同等です。connection
|containerID
ルーターによるブローカーへの接続方法。発信接続 (
connection
) またはブローカーのコンテナー ID (containerID
) のいずれかを指定できます。この接続で複数のブローカーがルーターに接続されている場合、リンクルートの接頭辞またはパターンに一致するアドレスの要求がブローカー全体で分散されます。または、特定のブローカーを指定する場合は、
containerID
を使用し、ブローカーのコンテナー ID を追加します。direction
-
このリンクルート上のルーターネットワークにメッセージを送信するように、この属性を
in
に設定します。
その他の属性の詳細は、
qdrouterd.conf
の man ページの linkRoute を参照してください。クライアントがこのリンクルート上のメッセージを受信するには、出力リンクルートを作成します。
linkRoute { prefix: my_queue connection: my_broker direction: out ... }
prefix
|pattern
ルーティングされたリンク割り当てを受信するブローカーキューに一致するアドレス接頭辞またはパターン。この接頭辞またはパターンに一致するメッセージはすべて、リンクルートとともに分散されます。接頭辞を指定して、アドレスの正確なアドレスまたは開始セグメントと一致するように指定できます。または、ワイルドカードを使用してアドレスに一致するパターンを指定できます。
接頭辞は、
.
または/
文字のいずれかで区切られたアドレス内の正確なアドレスまたは最初のセグメントと一致します。たとえば、接頭辞my_address
は、my_address
とmy_address.1
およびmy_address/1
のアドレスと一致します。ただし、my_address1
と一致しません。パターンは、パターンに対応するアドレスと一致します。パターンは、
.
または/
のいずれかで区切られた単語シーケンスです。ワイルドカード文字を使用して単語を表すことができます。*
文字は 1 つの単語にマッチし、#
文字はゼロ以上の単語のシーケンスと一致します。*
および#
文字はワイルドカードとして予約されています。したがって、メッセージアドレスでは使用しないでください。アドレスパターンの作成に関する詳細は、「アドレスパターンの一致」 を参照してください。
注記prefix
値をpattern
に変換するには 、/#
をそれに追加します。たとえば、接頭辞a/b/c
は、パターンa/b/c/#
と同等です。connection
|containerID
ルーターによるブローカーへの接続方法。発信接続 (
connection
) またはブローカーのコンテナー ID (containerID
) のいずれかを指定できます。この接続で複数のブローカーがルーターに接続されている場合、リンクルートの接頭辞またはパターンに一致するアドレスの要求がブローカー全体で分散されます。または、特定のブローカーを指定する場合は、
containerID
を使用し、ブローカーのコンテナー ID を追加します。direction
-
このリンクルートが受信側用であることを指定するには、この属性を
out
に設定します。
その他の属性の詳細は、
qdrouterd.conf
の man ページの linkRoute を参照してください。
12.2.3. リンクルートの例: 異なるネットワーク上でのクライアントおよびブローカーの接続
この例は、リンクルートがクライアントを別のプライベートネットワークにあるメッセージブローカーに接続できる方法を示しています。
図12.6 分離されたクライアントを使用するルーターネットワーク
クライアントは、独自のネットワーク (R3
) でルーターに接続するためにファイアウォールポリシーによって制限されます。ただし、リンクルートを使用して、異なるネットワーク上にある場合でも、メッセージブローカー B1
および B2
を指定した他の AMQP サービスにアクセスできます。
この例では、クライアントは Private Network 1
のブローカー B2
でホストされる b2.event-queue
からメッセージを受信する必要があります。リンクルートは、クライアントとサーバー間にルーターネットワークがあることを認識していても、クライアントとブローカーを接続する。
ルーターの設定
クライアントがブローカー B2
で b2.event-queue
からメッセージを受信できるようにするには、ルーター R2
が以下を実行できる必要があります。
-
ブローカー
B2
への接続 -
ブローカー
B2
間のルートリンク -
b2.event-queue
アドレスを持つリンクの有効な宛先として、ルーターネットワークにアドバタイズします。
ルーター R2
の設定ファイルの関連する部分で、以下が表示されます。
connector { 1 name: broker role: route-container host: 192.0.2.1 port: 61617 saslMechanisms: ANONYMOUS } linkRoute { 2 prefix: b2 direction: in connection: broker } linkRoute { 3 prefix: b2 direction: out connection: broker }
- 1
- ルーターからブローカー
B2
への外向き接続。route-container
ロールにより、ルーターは外部 AMQP コンテナー (この場合はブローカー) に接続できるようになります。 - 2
- クライアント送信者からリンクを受信するための受信リンクルート。
b2
で始まるアドレスがブローカーB2
で始まるターゲットを持つ送信者は、broker
コネクターを使用してブローカー B2 にルーティングされます。 - 3
- クライアントレシーバーへのリンクを送信するための出力リンクルート。ソースアドレスが
b2
で始まるレシーバーは、broker
コネクターを使用してブローカーB2
にルーティングされます。
この設定では、ルーター R2
は、b2
で始まるターゲットおよびソースの有効な宛先としてアドバタイズできます。また、ルーターはブローカー B2
に接続でき、b2
接頭辞で始まるキューとキューからリンクをルーティングできるようにします。
必須ではありませんが、ルーター R1
と R3
でも同じ設定が必要です。
クライアントがメッセージを受信する方法
設定されたリンクルートを使用すると、クライアントは異なるネットワーク上にある場合でもブローカー B2
からメッセージを受信できます。
ルーター R2
はブローカー B2
への接続を確立します。接続が開かれると、R2
は他のルーター (R1
および R3
) に、これが b2
接頭辞へのリンクルート用の有効な宛先であることを通知します。つまり、R1
または R3
に割り当てられた送信元と受信側のリンクは、最短のパスは R2
にルーティングされ、それをブローカー B2
にルーティングします。
ブローカー B2
で b2.event-queue
からメッセージを受信するには、クライアントは受信側リンクを b2.event-queue
のソースアドレスでそのローカルルーター (R3
) に割り当てます。アドレスは b2
接頭辞に一致するため、R3
はリンクを R1
にルーティングします。これは、ルート内の次のホップから宛先にルーティングします。R1
は、リンクを R2
にルーティングし、これをブローカー B2
にルーティングします。クライアントが受信側が確立され、メッセージの受信を開始できます。
ブローカー B2
が何らかの理由で利用できない場合、ルーター R2
は b2
アドレスの宛先としてアドバタイズしません。この場合、ルーター R1
および R3
は、宛先に利用可能なルートがないことを示すエラーメッセージで、ブローカー B2
にルーティングされるべきリンク接続を拒否します。