ルーティングはjBroker MQ 2.1で導入されました。ルーティングを使用すると、ネットワークで複数のjBroker MQ 2.1サーバを使用できます。 各サーバ(ブローカ)は、他のブローカにメッセージを転送できます。メッセージが転送されたブローカは、さらに他のブローカにもメッセージを転送できます。 これにより、高度なアプリケーションで、よりスケーラブルで、性能も良く、さらに柔軟性のあるメッセージングシステムを作成できます。 この章では、jBroker MQのルーティングについて詳しく説明します。
ルーティングの概念は、IPおよびメールメッセージングスタックで良く知られています。 メッセージは、送信者から受信者に直接送られるのではなく、いくつもの中間段階を介して送られます。 ルーティングは、プロデューサおよびコンシューマのアプリケーション間に単一のメッセージサーバを導入するという発想を拡張したものです。 ルーティングの特長として、次の点が挙げられます。
ルーティングの利点を説明するため、4種類の基本的なネットワークトポロジ(次の図1)を参照してください。 ここで、いくつかの専門用語を紹介します。このガイドでは、「ダウンストリーム」という用語を使用します。これは、特定のノードからアクセスできるすべてのノードという意味です。 たとえば、図のファンアウトで、c13とc14は、c11とc12の両方のダウンストリームです。 同様に、「アップストリーム」という用語も使用します。これは、特定のノードに対するメッセージソースのノードという意味です。
図1-1: 基本的なネットワークトポロジ
これらのトポロジではそれぞれ特別な利点があります。
ルーティングが使用される通常の構成には、ローカル/リモートブローカがあります。 この場合、ネットワークの各マシンには、常に使用できるものと仮定できるローカルブローカ(ローカルマシンで実行)があります。 各ローカルブローカは、1つまたは複数のリモートブローカと通信します。リモートブローカはメッセージを分配します。 ローカルブローカとリモートブローカ間の接続が使用できない場合、これは、クライアントに対して完全に透過的になります。
jBroker MQは、各サーバでいくつものルーティングターゲットブローカを許可することで、ルーティングをサポートしています。 ターゲットブローカは、クラスタリングの場合と同様に、ホスト/ポートを使用して指定されます。 また、クラスタリングと同様に、メッセージ転送は、キューやトピックにより異なります。
同じネットワークのメッセージブローカ間での宛先は自動的には同期化されません。 宛先があるブローカに作成され、このブローカから次のブローカにメッセージが送られる場合、次のブローカにはこの宛先は自動作成されません。 トピックメッセージが、メッセージの宛先をホストしないブローカに送られる場合、メッセージは破棄されます。 ただし、キューメッセージが転送できない場合、これは、特別なエラーキュー(設定されている場合)に保存されます。
このような機能により、単一サーバシステムと同じキューおよびトピックのセマンティックが提供されます。 トピックサブスクライバは、最初のサブスクライブ後にトピックに送信されるすべてのメッセージを受信します。 キュー受信者は、未処理メッセージをキューからラウンドロビン方式で受信します。 唯一異なる点は、コンシューマが、メッセージの本来の送信先ではないサーバからでもメッセージを受信できるという点です。
ローカル/リモートブローカは、一般的な構成です。 この構成は、特に、HTTP転送と併用すると、たとえば、ラップトップでインターネットを使用してリモートブローカにメッセージを送ることができます。 次の図2にこの構成を示します。
図2-1: jBroker MQのローカル/リモートブローカ
メッセージのプロデューサは、ローカルブローカを使用します。この場合、このローカルブローカは、ファイル保存を使用するように設定されています(「ライト」メッセージサーバ)。 次に、ローカルブローカは、HTTPを使用してメッセージをリモートブローカに送ります。つまり、メッセージはインターネットに送られます。 リモート側では、jBroker ORB HTTPトンネルは着信HTTPトラフィックを受信して、リモートブローカに転送します。
ルーティングは、JMQMessageServiceインタフェースから次のプロパティを使用して構成されます。
msgsvc.router.targets - このブローカのメッセージ転送先となる他のブローカのURLのカンマ区切りリスト。 例:
godel:3506, escher:3506
msgsvc.router.topics - 他のブローカに送られるメッセージのトピックのカンマ区切りリスト。 これは、通常、送信されるメッセージの量を制限するときに使用します。 例:
topic0, topic1
msgsvc.error.queue - ローカルエラーメセージが保存されるキュー。 メッセージブローカが、このブローカにバインドされないキューに対して指定された送信メッセージを受信し、メッセージを転送する他のルーティング宛先またはクラスタメンバーがこのブローカにない場合、そのメッセージはこのエラーキューに保存されます。 エラーキューを指定しない場合、メッセージは破棄されます。 このプロパティで指定されるキューが存在しない場合、自動的に作成されます。
これらのプロパティは、jBroker MQサーバプログラムjmqservで使用されるmsgsvc.propertiesファイルの一部です。