Oracle® Fusion Middleware Oracle WebLogic Server JMS プログラマーズ ガイド 11g リリース 1 (10.3.1) B55536-01 |
|
![]() 戻る |
![]() 次へ |
マルチキャストを使用することによって、後でメッセージをクラスタ内のサブスクライバに転送する、指定したホストのグループにメッセージを配信できます。以下の節では、WebLogic JMS でマルチキャストを使用する場合の利点、制限事項、およびコンフィグレーションについて説明します。
マルチキャストには、次のような利点があります。
ホスト グループにメッセージをほとんどリアルタイムに配信できる。
メッセージをクラスタ内のトピック サブスクライバに配信する場合に JMS サーバで必要になるリソース量が削減されるので、スケーラビリティが向上する。
マルチキャストには、次のような制限があります。
マルチキャストでは、ホスト グループの全メンバーに対するメッセージの配信は保証されない。確実な配信と回復が必要なメッセージについては、マルチキャストを使用しないでください。
WebLogic Server のさまざまなバージョンとの相互運用性を確保するために、ホストより前のリリースの WebLogic Server をクライアントにインストールすることはできない。すべてのクライアントにホストと同じバージョンかそれより上のバージョンをインストールする必要があります。
マルチキャストを使用すると便利な例としては、株価表示があります。最新の株価を入手する場合に重要になるのは、信頼性よりもタイムリーな配信です。全部または一部の内容が配信されなくても、リアルタイムの株価情報にアクセスするときに、クライアントは簡単に情報の再送信を要求できます。クライアントでは情報の回復は必要とされません。回復された情報が再配信される頃には、その情報は古くて価値のないものになっています。
WebLogic Server では、マルチキャスト以外の方法でクラスタのメッセージングおよび通信を処理することもできます。ユニキャストは、マルチキャストのようなネットワーク間コンフィグレーションを必要としない単純なコンフィグレーションです。加えて、マルチキャスト アドレスの衝突によって発生する可能性がある潜在的なネットワーク エラーが低減されます。
JMS トピックは、クラスタ アドレスに依存しない独自のマルチキャスト アドレスに対してメッセージをパブリッシュするので、マルチキャスト向けにコンフィグレーションされた JMS トピックでもユニキャスト向けにコンフィグレーションされた WebLogic クラスタにアクセスできます。ただし、以下の点を考慮に入れてください。
ユニキャスト クラスタが使用できるようにルータ ハードウェアをコンフィグレーションすると、JMS マルチキャスト サブスクライバが機能しない場合がある。
JMS マルチキャスト サブスクライバは、マルチキャスト アクセスが可能なネットワーク ハードウェア コンフィグレーションを必要とする。
詳細については、『Oracle Fusion Middleware Oracle WebLogic Server クラスタの使い方』の「クラスタでの通信」を参照してください。
次の図に、マルチキャストの設定に必要な手順を示します。
注意 : マルチキャストは、Pub/Sub メッセージング モデル、および非恒久サブスクライバのみでサポートされています。マルチキャスト セッションおよびマルチキャスト コンシューマに関するモニタ統計は提供されません。 |
マルチキャストを設定する前に、マルチキャストをサポートするよう、次のように接続ファクトリおよび送り先をコンフィグレーションする必要があります。
各接続ファクトリについては、システム管理者が、マルチキャスト セッションに存在できる未処理のメッセージの最大数と、最大数に達した場合に最新のメッセージと最古のメッセージのどちらを破棄するかをコンフィグレーションする。メッセージが最大数に達すると、DataOverrunException
が送出され、メッセージは自動的に破棄されます。これらの属性は、動的にコンフィグレーションすることもできます (「マルチキャストのコンフィグレーション属性の動的コンフィグレーション」を参照)。
各送り先については、マルチキャスト アドレス (IP)、ポート、TTL (存続時間) の各属性を指定する。TTL 属性の設定の詳細については、「例 : マルチキャスト TTL (存続時間)」を参照してください。
注意 : マルチキャスト IP アドレス、ポート、存続時間の各属性をコンフィグレーションする場合は、ネットワーク管理者に相談の上、適切な値を設定することを強くお勧めします。 |
詳細については、Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「トピック マルチキャスト パラメータのコンフィグレーション」を参照してください。
「JMS アプリケーションの設定」に説明されているとおりに JMS アプリケーションを設定します。ただし、セッションを作成する際は、「手順 3 : 接続を使用してセッションを作成する」に説明されているように、acknowledgeMode
の値を MULTICAST_NO_ACKNOWLEDGE
に設定して、セッションがマルチキャスト メッセージを受信するように指定します。
注意 : マルチキャストは、Pub/Sub メッセージング モデル、および非恒久サブスクライバのみでサポートされています。マルチキャスト セッションで恒久サブスクライバを作成しようとすると、JMSException が送出されます。 |
たとえば、次のメソッドは、Pub/Sub メッセージング モデル用のマルチキャスト セッションの作成方法を示します。
JMSModuleHelper.createPermanentQueueAsync(ctx, domain, jmsServerName, queueName, jndiName); Queue queue = findQueue(qsess, jmsServerName, queueName, retry_count, retry_interval);
注意 : クライアント サイドでは、マルチキャスト セッションごとに、ソケットからメッセージを取り出すための専用のスレッドが 1 つ必要になります。そのため、JMS クライアントサイドのスレッド プール サイズを増やして調整する必要があります。 |
さらに、「TopicPublisher と TopicSubscriber の作成」の説明に従って、トピック サブスクライバを作成します。
たとえば、次のコードは、トピック サブスクライバの作成方法を示します。
tsubscriber = tsession.createSubscriber(myTopic);
注意 : 指定した送り先がマルチキャストをサポートするようコンフィグレーションされていない場合、createSubscriber() メソッドは失敗します。 |
マルチキャストのトピック サブスクライバでは、メッセージを非同期に受信することしかできません。マルチキャスト セッションで同期メッセージを受信しようとすると、JMSException
が送出されます。
「メッセージの非同期受信」の説明に従って、トピック サブスクライバに対してメッセージ リスナを設定します。
たとえば、次のコードは、メッセージ リスナの設定方法を示します。
tsubscriber.setMessageListener(this);
メッセージを受信すると、WebLogic JMS では、送り先から送信されたメッセージのシーケンスがトラッキングされます。マルチキャスト サブスクライバのメッセージ リスナがシーケンスの異なるメッセージを受信すると、その結果、1 つまたは複数のメッセージがスキップされ、そのセッションの ExceptionListener
に SequenceGapException
が送出されます。スキップされたメッセージは、その後配信されても破棄されます。たとえば、次の図では、サブスクライバは 2 つの送り先から同時にメッセージを受信しています。
送り先 1 からメッセージ「4」を受信すると、SequenceGapException
が送出され、シーケンスの異なるメッセージが受信されたことがアプリケーションに通知されます。その後、メッセージ「3」が配信されても、それは破棄されます。
注意 : やり取りされるメッセージ数が多くなるほど、SequenceGapException が発生する危険性も大きくなります。 |
システム管理者は、コンフィグレーション時に、マルチキャストをサポートするよう、各接続ファクトリに対して以下の情報をコンフィグレーションします。
マルチキャスト セッションに存在できる未処理のメッセージの最大数を指定する、最大メッセージ数
メッセージが最大数に達した場合に、最新のメッセージと最古のメッセージのどちらを破棄するかを指定する、超過時のポリシー
メッセージが最大数に達すると、DataOverrunException
が送出され、メッセージは超過時のポリシーに基づいて自動的に破棄されます。また、Session
クラスの set メソッドを使用して、最大メッセージ数と超過時のポリシーを設定する方法もあります。
次の表に、Session
クラスの set メソッドと get メソッドを、動的コンフィグレーションが可能な属性ごとに示します。
表 7-1 メッセージ プロデューサの set メソッドおよび get メソッド
属性 | set メソッド | get メソッド |
---|---|---|
最大メッセージ数 |
public void setMessagesMaximum( int messagesMaximum ) throws JMSException |
public int getMessagesMaximum( ) throws JMSException |
超過時のポリシー |
public void setOverrunPolicy ( int overrunPolicy ) throws JMSException |
public int getOverrunPolicy( ) throws JMSException |
注意 : set メソッドを使用して設定された値は、コンフィグレーションされた値よりも優先されます。 |
Session
クラスのメソッドの詳細については、weblogic.jms.extensions.WLSession
の Javadoc を参照してください。これらのマルチキャスト コンフィグレーション属性の詳細については、Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「トピック マルチキャスト パラメータのコンフィグレーション」を参照してください。
注意 : 次の図は、マルチキャスト TTL (存続時間) 送り先コンフィグレーション属性が、ルータを経由したメッセージの配信に影響する様子を説明するための単純な例です。マルチキャスト TTL 属性をコンフィグレーションする場合は、ネットワーク管理者に相談してから、適切な値を設定することをお勧めします。マルチキャスト TTL は、メッセージの存続時間に依存しません。 |
次の例では、マルチキャスト TTL 送り先コンフィグレーション属性が、ルータを経由したメッセージの配信に影響する様子を示します。
詳細については、Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「トピック マルチキャスト パラメータのコンフィグレーション」を参照してください。
次のようなネットワーク図があります。
この図では、ネットワークは 3 つのサブネットで構成されています。サブネット A にはマルチキャスト パブリッシャがあり、サブネット B および C にはそれぞれ 1 台ずつマルチキャスト サブスクライバがあります。
マルチキャスト TTL 属性が 0 に設定されている (メッセージはルータを経由できず、現在のサブネットにしか配信されないことを示す) 場合は、サブネット A にあるマルチキャスト パブリッシャでメッセージがパブリッシュされても、メッセージはどのマルチキャスト サブスクライバにも配信されません。
マルチキャスト TTL 属性が 1 に設定されている (メッセージは 1 台のルータを経由できることを示す) 場合、サブネット A にあるマルチキャスト パブリッシャでメッセージがパブリッシュされると、サブネット B にあるマルチキャスト サブスクライバでメッセージが受信されます。
同様に、マルチキャスト TTL 属性が 2 に設定されている (メッセージは 2 台のルータを経由できることを示す) 場合、サブネット A にあるマルチキャスト パブリッシャでメッセージがパブリッシュされると、サブネット B および C にあるマルチキャスト サブスクライバでメッセージが受信されます。