ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JMS プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55536-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

7 WebLogic JMS でのマルチキャストの使い方

マルチキャストを使用することによって、後でメッセージをクラスタ内のサブスクライバに転送する、指定したホストのグループにメッセージを配信できます。以下の節では、WebLogic JMS でマルチキャストを使用する場合の利点、制限事項、およびコンフィグレーションについて説明します。

マルチキャストを使用する利点

マルチキャストには、次のような利点があります。

マルチキャストを使用する上での制限事項

マルチキャストには、次のような制限があります。

マルチキャストを使用すると便利な例としては、株価表示があります。最新の株価を入手する場合に重要になるのは、信頼性よりもタイムリーな配信です。全部または一部の内容が配信されなくても、リアルタイムの株価情報にアクセスするときに、クライアントは簡単に情報の再送信を要求できます。クライアントでは情報の回復は必要とされません。回復された情報が再配信される頃には、その情報は古くて価値のないものになっています。

WebLogic Server ユニキャストの使用

WebLogic Server では、マルチキャスト以外の方法でクラスタのメッセージングおよび通信を処理することもできます。ユニキャストは、マルチキャストのようなネットワーク間コンフィグレーションを必要としない単純なコンフィグレーションです。加えて、マルチキャスト アドレスの衝突によって発生する可能性がある潜在的なネットワーク エラーが低減されます。

JMS トピックは、クラスタ アドレスに依存しない独自のマルチキャスト アドレスに対してメッセージをパブリッシュするので、マルチキャスト向けにコンフィグレーションされた JMS トピックでもユニキャスト向けにコンフィグレーションされた WebLogic クラスタにアクセスできます。ただし、以下の点を考慮に入れてください。

詳細については、『Oracle Fusion Middleware Oracle WebLogic Server クラスタの使い方』の「クラスタでの通信」を参照してください。

WebLogic Server でのマルチキャストのコンフィグレーション

次の図に、マルチキャストの設定に必要な手順を示します。

図 7-1 マルチキャストの設定

図 7-1 の説明については以下を参照
「図 7-1 マルチキャストの設定」の説明


注意 :

マルチキャストは、Pub/Sub メッセージング モデル、および非恒久サブスクライバのみでサポートされています。

マルチキャスト セッションおよびマルチキャスト コンシューマに関するモニタ統計は提供されません。


マルチキャストの前提条件

マルチキャストを設定する前に、マルチキャストをサポートするよう、次のように接続ファクトリおよび送り先をコンフィグレーションする必要があります。

  • 各接続ファクトリについては、システム管理者が、マルチキャスト セッションに存在できる未処理のメッセージの最大数と、最大数に達した場合に最新のメッセージと最古のメッセージのどちらを破棄するかをコンフィグレーションする。メッセージが最大数に達すると、DataOverrunException が送出され、メッセージは自動的に破棄されます。これらの属性は、動的にコンフィグレーションすることもできます (「マルチキャストのコンフィグレーション属性の動的コンフィグレーション」を参照)。

  • 各送り先については、マルチキャスト アドレス (IP)、ポート、TTL (存続時間) の各属性を指定する。TTL 属性の設定の詳細については、「例 : マルチキャスト TTL (存続時間)」を参照してください。


    注意 :

    マルチキャスト IP アドレス、ポート、存続時間の各属性をコンフィグレーションする場合は、ネットワーク管理者に相談の上、適切な値を設定することを強くお勧めします。

詳細については、Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「トピック マルチキャスト パラメータのコンフィグレーション」を参照してください。

手順 1 : JMS アプリケーションを設定し、マルチキャスト セッションとトピック サブスクライバを作成する

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() メソッドは失敗します。

手順 2 : メッセージ リスナを設定する

マルチキャストのトピック サブスクライバでは、メッセージを非同期に受信することしかできません。マルチキャスト セッションで同期メッセージを受信しようとすると、JMSException が送出されます。

メッセージの非同期受信」の説明に従って、トピック サブスクライバに対してメッセージ リスナを設定します。

たとえば、次のコードは、メッセージ リスナの設定方法を示します。

tsubscriber.setMessageListener(this);

メッセージを受信すると、WebLogic JMS では、送り先から送信されたメッセージのシーケンスがトラッキングされます。マルチキャスト サブスクライバのメッセージ リスナがシーケンスの異なるメッセージを受信すると、その結果、1 つまたは複数のメッセージがスキップされ、そのセッションの ExceptionListenerSequenceGapException が送出されます。スキップされたメッセージは、その後配信されても破棄されます。たとえば、次の図では、サブスクライバは 2 つの送り先から同時にメッセージを受信しています。

図 7-2 マルチキャストにおけるシーケンスのずれ

図 7-2 の説明については以下を参照
「図 7-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 は、メッセージの存続時間に依存しません。


次の例では、マルチキャスト TTL 送り先コンフィグレーション属性が、ルータを経由したメッセージの配信に影響する様子を示します。

詳細については、Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「トピック マルチキャスト パラメータのコンフィグレーション」を参照してください。

次のようなネットワーク図があります。

図 7-3 マルチキャスト TTL の例

図 7-3 の説明については以下を参照
「図 7-3 マルチキャスト TTL の例」の説明

この図では、ネットワークは 3 つのサブネットで構成されています。サブネット A にはマルチキャスト パブリッシャがあり、サブネット B および C にはそれぞれ 1 台ずつマルチキャスト サブスクライバがあります。

マルチキャスト TTL 属性が 0 に設定されている (メッセージはルータを経由できず、現在のサブネットにしか配信されないことを示す) 場合は、サブネット A にあるマルチキャスト パブリッシャでメッセージがパブリッシュされても、メッセージはどのマルチキャスト サブスクライバにも配信されません。

マルチキャスト TTL 属性が 1 に設定されている (メッセージは 1 台のルータを経由できることを示す) 場合、サブネット A にあるマルチキャスト パブリッシャでメッセージがパブリッシュされると、サブネット B にあるマルチキャスト サブスクライバでメッセージが受信されます。

同様に、マルチキャスト TTL 属性が 2 に設定されている (メッセージは 2 台のルータを経由できることを示す) 場合、サブネット A にあるマルチキャスト パブリッシャでメッセージがパブリッシュされると、サブネット B および C にあるマルチキャスト サブスクライバでメッセージが受信されます。