ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JMSのプログラミング
11g リリース1 (10.3.6)
B61629-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この章では、WebLogic JMSのマルチキャストを使用して、後でメッセージをクラスタ内のサブスクライバに転送する、指定したホストのグループにメッセージを配信する方法について説明します。

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

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

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

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

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

WebLogic Serverユニキャストの使用

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

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

詳細は、『Oracle WebLogic Serverクラスタの使用』のクラスタでの通信に関する項を参照してください。

WebLogic Serverでのマルチキャストの構成

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

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

図8-1の説明が続きます
「図8-1 マルチキャストの設定」の説明


注意:

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

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


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

マルチキャストを設定する前に、マルチキャストをサポートするよう、次のように接続ファクトリおよび宛先を構成する必要があります。

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

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


    注意:

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


詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのトピックのマルチキャスト・パラメータの構成に関する項を参照してください。

ステップ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つの宛先から同時にメッセージを受信しています。

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

図8-2の説明が続きます
「図8-2 マルチキャストにおけるシーケンスのずれ」の説明

宛先1からメッセージ「4」を受信すると、SequenceGapExceptionがスローされ、シーケンスの異なるメッセージが受信されたことがアプリケーションに通知されます。その後、メッセージ「3」が配信されても、それは破棄されます。


注意:

やり取りされるメッセージ数が多くなるほど、SequenceGapExceptionが発生する危険性も大きくなります。


マルチキャストの構成属性の動的構成

システム管理者は、構成時に、マルチキャストをサポートするよう、各接続ファクトリに対して以下の情報を構成します。

  • マルチキャスト・セッションに存在できる未処理のメッセージの最大数を指定する、最大メッセージ数

  • メッセージが最大数に達した場合に、最新のメッセージと最古のメッセージのどちらを破棄するかを指定する、超過時のポリシー

メッセージが最大数に達すると、DataOverrunExceptionがスローされ、メッセージは超過時のポリシーに基づいて自動的に破棄されます。また、Sessionクラスのsetメソッドを使用して、最大メッセージ数と超過時のポリシーを設定する方法もあります。

次の表に、Sessionクラスのsetメソッドとgetメソッドを、動的構成が可能な属性ごとに示します。

表8-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 WebLogic Server管理コンソール・オンライン・ヘルプのトピックのマルチキャスト・パラメータの構成に関する項を参照してください。

例: マルチキャストTTL (存続時間)


注意:

次の図は、マルチキャストTTL (存続時間)宛先構成属性が、ルーターを経由したメッセージの配信に影響する様子を説明するための単純な例です。マルチキャストTTL属性を構成する場合は、ネットワーク管理者に相談してから、適切な値を設定することをお薦めします。

マルチキャストTTLは、メッセージの存続時間に依存しません。


次の例では、マルチキャストTTL宛先構成属性が、ルーターを経由したメッセージの配信に影響する様子を示します。

詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのトピックのマルチキャスト・パラメータの構成に関する項を参照してください。

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

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

図8-3の説明が続きます
「図8-3 マルチキャストTTLの例」の説明

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

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

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

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