Oracle® Fusion Middleware Oracle WebLogic Server 12.1.3メッセージドリブンBeanの開発 12c (12.1.3) E56244-02 |
|
![]() 前 |
![]() 次 |
この付録では、WebLogic Server 12.1.3の様々なトピックのMDB構成におけるMDBのデプロイメント・アクションについて説明します。アクションには、MDBフリー・プールが作成される場所およびその数、サブスクリプションが作成される場所およびその数、所定のメッセージング消費パターンを達成するためにサブスクライバが共に機能する仕組みなどが含まれます。
この項では、topicMessagesDistributionMode
がCompatibility
に設定されている場合、トピックが外部の(WebLogic以外の)トピックの場合、またはトピックがWebLogic Serverリリース10.3.4以前のWebLogic JMSトピックの場合に発生するレガシー動作の詳細は説明しません。
お薦めの設定を含むアプリケーションの適切なシナリオ(順列)を決定するためのヘルプは、第10章「JMSトピックを使用したMDBの構成とデプロイ」を参照してください。
この付録の内容は次のとおりです。
次の設定は、(WebLogic Server 10.3.4以降の) WebLogic JMSトピックから消費するWebLogic MDBが、MDBフリー・プールのインスタンス、サブスクリプションのネーミング、サブスクリプションの場所を作成する方法、およびメッセージがMDBプール・インスタンスに配信される方法を決定します。
(MDBデプロイメントとしての同一クラスタまたはサーバー内、あるいはリモート・クラスタまたはサーバー上の)トピックの場所。
トピック・タイプ(シングルトンWebLogicトピック、レプリケートされた
分散トピックまたはパーティション化された
分散トピック)。
subscriptionDurability
設定。
topicMessagesDistributionMode
およびdistributedDestinationConnection
設定。
表A-1は、可能な構成の順列および対応するデプロイメント・アクションを説明しています。最初の2列が構成の順列を説明し、最後の2列は結果のデプロイメントを説明します。列は次のとおりです。
topicMessagesDistributionMode
-- topicMessagesDistribution
構成オプションの値。つまり、One-Copy-Per-Server
またはOne-Copy-Per-Application
です。従来の互換性
モードは、この表に変換されません。
トピック・タイプの順列: オプションには次が含まれます。
LocalまたはRemote -- トピックが、MDB (ローカル)として同一のクラスタまたはサーバーにデプロイされるか、あるいは異なるクラスタまたはサーバー(リモート)にデプロイされるかどうか。
PDT、RDT、または単一のWebLogic JMSトピック: トピックの種類が、パーティション化された分散トピック(PDT)、レプリケートされた分散トピック(RDT)、または単一のWebLogic JMSトピックのいずれであるかを示します。
EveryMemberまたはLocalOnly -- distributedDestinationConnection
の値。同一クラスタ内のLocal
分散トピックにアクセスするMDBが、すべての分散トピック・メンバーから消費するか、または現在のサーバーに対してローカルの分散トピック・メンバーのみから消費するかを指定します。EveryMember
とLocalOnly
のどちらも指定されない場合、順列はdistributedDestinationConnection
の設定に関係なく適用されます。
たとえば、トピック・タイプの順列「Local RDT LocalOnly」は、「MDBは同一クラスタ(Local)に、レプリケートされたトピック(RDT)としてデプロイされ、そのMDBは同じWebLogic Server上のトピック・メンバーからのみ(LocalOnly
)消費するように構成される」ことを意味します。
各サーバーのサブスクライブ先 -- WebLogic Serverインスタンスが作成するMDBプールの数、およびMDBインスタンスのサブスクライブ対象となる分散トピックのメンバー。例:
「各サーバーのサブスクライブ先 ... すべてのメンバー」は、「コンテナは分散トピックの各メンバーに対して1つのローカルMDBプールを作成する」ことを意味します。
「各サーバーのサブスクライブ先 ... すべてのローカル・メンバー」は、「コンテナは、同一サーバー上で稼働中の各メンバーに対して1つのMDBプールを作成し、各MDBプールはそれらのメンバーのいずれか1つをサブスクライブする」ことを意味します。
サーバーごとにMDBプール -- クラスタ内の各サーバー上のMDBデプロイメント・インスタンスの数(およびそれによる分散トピック・メンバーへの接続数)。M = 分散トピック・メンバー数(スタンドアロン・トピックの場合はM=1
)。
表A-1 構成の順列およびその結果として起こるデプロイメント・アクション
MDB構成 | デプロイメント・アクション | ||
---|---|---|---|
topicMessagesDistributionMode | トピック・タイプの順列 | 各サーバーのサブスクライブ先 | サーバーごとにMDBプール |
|
|
ローカル・メンバーの1つ |
1つ |
|
|
リモート・メンバーの1つ |
1つ |
|
すべてのメンバー |
M |
|
|
|
すべてのローカル・メンバー |
ローカル・メンバーごとに1つ |
|
すべてのメンバー |
M |
脚注 1 「One-Copy-Per-Server
、RDT、Local、LocalOnly」の順列は、一部の構成トポロジにおける恒久サブスクリプションではサポートされていません(詳細は、シナリオ1: レプリケートされたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費を参照してください)。
脚注 2 リモート分散トピックの場合、「One-Copy-Per-Server
, Replicated Distributed Topic, Remote」の順列の非恒久サブスクリプションは除き、WebLogic Serverは常にすべてのトピック・メンバーに対してサブスクリプションを作成します。この場合、任意のリモート・メンバーに対して1つのサブスクリプションのみが作成されます。(シナリオ3: レプリケートされたDT、サーバーごとに1つのコピー、リモート・デプロイメントを参照してください)
脚注 3 LocalOnly
設定は、「One-Copy-Per-Server, Partitioned Distributed Topic, Local」の順列で常にEveryMember
と自動的に置換されます。(シナリオ7: パーティション化されたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費を参照してください)
次の項では、MDBアプリケーションの予想されるデプロイメント・シナリオを示します。
シナリオ内の図で使用されるイメージおよびラベルは、表A-2で説明されます。
表A-2 シナリオ内で使用されるイメージおよびテキストの説明
イメージまたはテキスト | 説明 |
---|---|
|
分散トピックにパブリッシュされるメッセージ。 |
|
メッセージは重複し、コピーが他のトピック・メンバーに転送されます。つまり、トピックはレプリケートされた分散トピックということになります。 |
DTメンバーn |
分散トピックのメンバー。 |
MDBプール |
MDBフリーBeanプール。 |
|
サブスクリプション。矢印の一端にあるMDBは、矢印のもう一端にあるトピックからのメッセージをリスニングして消費します。 |
|
共有サブスクリプション。 |
|
非共有サブスクリプション。S1は管理対象サーバー1のサブスクリプション、S2は管理対象サーバー2のサブスクリプションなどとなります。 |
スタンドアロン・トピック・シナリオは次のとおりです。
レプリケートされた分散トピックでは、すべての物理的なトピック・メンバーは各送信済メッセージを受信します。メッセージが物理的なトピック・メンバーのいずれかに着信すると、メッセージのコピーが内部で自動的に他のトピック・メンバーに転送されます。
次は、レプリケートされた分散トピックの予想されるデプロイメント・シナリオです。
図A-1は次の構成を示します。
レプリケートされた分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Server
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= LocalOnly
図A-1 シナリオ1: レプリケートされたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費
このシナリオでは、
メッセージのコピーは、RDTによってクラスタ内の他のサーバーに転送されます。
1つのMDBプールは、ローカル・クラスタ内の各サーバー上に作成されます。
各MDBプールは、同一サーバー上の分散トピック・メンバーのいずれか1つをリスニングします。
この方法では、すべてのメッセージングがローカルとなり(ネットワーク・コール全体に渡るメッセージの転送が回避)、すべての分散トピック・メンバーがMDBコンシューマによってサービスを提供されることが保証されるため、「RDT, One Copy Per Server, Local Deployment, EveryMember」よりも高いパフォーマンスが発揮されます。ただし、一部の使用状況では、「不均一なメッセージ・ロードおよび/またはメッセージ処理の遅延の処理方法」
で説明されるトレードオフに基づき、EveryMemberを選択した方がパフォーマンスが上がる場合があります。
このシナリオは、同一サーバー上に複数のメンバーが存在する場合、MDBアプリケーションをホストするローカル・サーバーのいずれかにメンバーが存在しない場合、またはJMSサービス移行(自動/手動)が関連する場合、恒久サブスクリプションでは適切に機能しません。
図A-2は次の構成を示します。
レプリケートされた分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Server
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= EveryMember
。
図A-2 シナリオ2: レプリケートされたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、すべてのメンバーが消費
このシナリオでは、
メッセージのコピーはRDTによってクラスタ内の他のサーバーに転送されますが、MDBサブスクリプションによってフィルタ・アウト(無視)されます。
MDBプールは、ローカル・クラスタ内の各サーバー上にある分散トピック・メンバーに対して作成されます。
各MDBプールは、クラスタ内の分散トピック・メンバーのいずれか1つをリスニングします。
MDBアプリケーションをホストする各WebLogic Serverインスタンスは、分散トピックのすべてのメンバーをリスニングします。
DTの同一メンバー上にある各サーバーのサブスクライバは、それぞれ独自のサブスクリプションを所有します。つまり、異なるサーバーから同一メンバーへのサブスクライバは、サブスクリプションを共有しません。
この構成では柔軟性が高くなるので、RDTが必要なアプリケーションには最適です。ただし、必ずしも正確にサーバーごとに1つのメンバーとなることは保証できません。移行などが原因で構成が変わることがあります。
この構成は、特に、移行が関連せず、各管理対象サーバー上に分散トピック・メンバーが1つのみ存在する静的環境では、「シナリオ1: レプリケートされたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費」と比較すると最高のパフォーマンスを発揮しません。移行が関連せず、各管理対象サーバー上に分散トピック・メンバーが1つのみ存在するアプリケーションでは、シナリオ1を使用できます。
図A-3は次の構成を示します。
レプリケートされた分散トピック
恒久サブスクリプション
topicMessagesDistributionMode
= One-Copy-Per-Server
MDBおよびトピックは、異なる(リモート)クラスタにデプロイされます。
リモート・デプロイメントでは、distributedDestinationConnection
は無視されます。
図A-3 シナリオ3: レプリケートされたDT、サーバーごとに1つのコピー、リモート・デプロイメント
このシナリオでは、
メッセージのコピーはRDTによってクラスタ内の他のサーバーに転送されますが、MDBサブスクリプションによってフィルタ・アウト(無視)されます。
各分散トピック・メンバーのMDBプールは、リモート・クラスタ内の各サーバー上で作成されます。
MDBアプリケーションをホストする各WebLogic Serverインスタンスは、分散トピックのすべてのメンバーをリスニングします(各リモート・メンバーに対して1つのローカル・プール)。
DTの同一メンバー上にある各サーバーのサブスクライバは、それぞれ独自のサブスクリプションを所有します。つまり、異なるサーバーから同一メンバーへのサブスクライバは、サブスクリプションを共有しません。
注意すべきは、恒久サブスクリプションの場合の動作であるということです。非恒久サブスクリプションの場合、各WebLogic Serverインスタンスは、最適化としてメンバーのいずれか1つ(任意のメンバー)に接続する単一のMDBプールを作成します。
図A-4は次の構成を示します。
レプリケートされた分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Application
。
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= LocalOnly
図A-4 シナリオ4: レプリケートされたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費
このシナリオでは、
メッセージのコピーはRDTによってクラスタ内の他のサーバーに転送されますが、MDBサブスクリプションによってフィルタ・アウト(無視)されます。
1つのMDBプールが各ローカル・メンバーのローカル・クラスタ内の各サーバー上で作成されます(図A-5は、各WebLogic Serverインスタンスが1つのメンバーをホストする構成を示します。同一のローカルWebLogic Serverインスタンス上に複数のメンバーが存在する場合、複数のMDBプールがサーバー上で作成されます)。
メッセージは1つのMDBプールにのみ送信されます。
同一メンバー上のすべてのサブスクライバは、同一のサブスクリプションを共有します。
図A-5は次の構成を示します。
レプリケートされた分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Application
。
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= EveryMember
。
図A-5 シナリオ5: レプリケートされたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、すべてのメンバーが消費
このシナリオでは、
メッセージのコピーはRDTによってクラスタ内の他のサーバーに転送されますが、MDBサブスクリプションによってフィルタ・アウト(無視)されます。
1つのMDBプールは、各メンバーのローカル・クラスタ内の各サーバー上で作成されます。
メッセージは1つのMDBプールにのみ送信されます。
同一メンバー上のすべてのサブスクライバは、同一のサブスクリプションを共有します。
図A-6は次の構成を示します。
レプリケートされた分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Application
。
MDBおよびトピックは、異なる(リモート)クラスタにデプロイされます。
リモート・デプロイメントでは、distributedDestinationConnection
は無視されます。
図A-6 シナリオ6: レプリケートされたDT、アプリケーションごとに1つのコピー、リモート・デプロイメント
このシナリオでは、
メッセージのコピーはRDTによってクラスタ内の他のサーバーに転送されますが、MDBサブスクリプションによってフィルタ・アウト(無視)されます。
1つのMDBプールは、リモート・クラスタ内の各メンバーのローカル・クラスタ内にある各サーバー上で作成されます。
メッセージは1つのMDBプールにのみ送信されます。
同一メンバー上のすべてのサブスクライバは、同一のサブスクリプションを共有します。
パーティション化されたトピックを使用すると、
メッセージ受信側の分散トピック・メンバーは、メッセージを認識する唯一のメンバーです。メッセージは他のメンバーに転送されず、他のメンバー上のサブスクライバはメッセージのコピーを取得しません。
受信メッセージは、JMSのAffinity
およびLoad Balance
属性を使用して、分散トピック・メンバー間でロード・バランシングされます。『Oracle WebLogic Server JMSリソースの管理』のパーティション化された分散トピックのロード・バランシングに関する項を参照してください。
次は、パーティション化された分散トピックの予想されるデプロイメント・シナリオです。
シナリオ9: パーティション化されたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費
シナリオ11: パーティション化されたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、すべてのメンバーが消費
このシナリオでは、distributedDestinationConnection
の設定は無視され、警告メッセージのログが記録されます。かわりに、設定は強制的にEveryMember
となります。動作は「EveryMember
」の場合と同じになります(「シナリオ8: パーティション化されたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、すべてのメンバーが消費」を参照してください)。
図A-7は次の構成を示します。
パーティション化された分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Server
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= EveryMember
。
図A-7 シナリオ8: パーティション化されたDT、サーバーごとに1つのコピー、ローカル・デプロイメント、すべてのメンバーが消費
このシナリオでは、
メッセージは分散トピック・メンバーに個別に配信されます。メッセージは重複したり、クラスタ内の他のメンバーにコピーされたりすることはありません。
MDBプールは、ローカル・クラスタ内の各サーバー上にある分散トピック・メンバーに対して作成されます。
DTの同一メンバー上にある各サーバーのサブスクライバは、それぞれ独自のサブスクリプションを所有します。つまり、特定のサーバーから同一メンバーへのサブスクライバは、別のサーバーのサブスクライバとサブスクリプションを共有しません。
このシナリオの詳細は、MDBデプロイメントおよびPDTが異なるクラスタ内にある点を除いて前のシナリオと同一です。
図A-8は次の構成を示します。
パーティション化された分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Application
。
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= LocalOnly
図A-8 シナリオ9: パーティション化されたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費
このシナリオでは、
メッセージは分散トピック・メンバーに個別に配信されます。メッセージは重複したり、クラスタ内の他のメンバーにコピーされたりすることはありません。
1つのMDBプールが各ローカル・メンバーのローカル・クラスタ内の各サーバー上で作成されます(図A-9は、各WebLogic Serverが1つのメンバーをホストする構成を示します。同一のローカルWebLogic Serverインスタンス上に複数のメンバーが存在する場合、複数のMDBプールが各WebLogic Serverインスタンス上で作成されます)。
このシナリオは、高パフォーマンスのOne-Copy-Per-Application
およびLocal
PTの構成にお薦めできます。ただし、一部の使用状況では、「不均一なメッセージ・ロードおよび/またはメッセージ処理の遅延の処理方法」
で説明されるトレードオフに基づき、EveryMemberを選択した方がパフォーマンスが上がる場合があります。
図A-10は次の構成を示します。
パーティション化された分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Application
。
MDBおよびトピックは、同一の(ローカル)クラスタにデプロイされます。
distributedDestinationConnection
= EveryMember
。
図A-9 シナリオ11: パーティション化されたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、すべてのメンバーが消費
パーティション化された分散トピック、アプリケーションごとに1つのコピー、ローカル・デプロイメントの組合せでは、「シナリオ9: パーティション化されたDT、アプリケーションごとに1つのコピー、ローカル・デプロイメント、ローカルのみの消費」
で示されるように、大半のユース・ケースでLocalOnly消費を使用する方が無難です。ただし、「不均一なメッセージ・ロードおよび/またはメッセージ処理の遅延の処理方法」で説明されるトレードオフがこの場合は適用されます。
図A-10は次の構成を示します。
パーティション化された分散トピック
topicMessagesDistributionMode
= One-Copy-Per-Application
。
MDBおよびトピックは、異なる(リモート)クラスタにデプロイされます。
リモート・デプロイメントでは、distributedDestinationConnection
は無視されます。
図A-10 シナリオ12: パーティション化されたDT、アプリケーションごとに1つのコピー、リモート・デプロイメント
このシナリオでは、
メッセージは分散トピック・メンバーに個別に配信されます。メッセージは重複したり、クラスタ内の他のメンバーにコピーされたりすることはありません。
サブスクリプションはすべての分散トピック・メンバー上で動的に自動作成されます。
メッセージは1つのMDBプールにのみ送信されます。
同一メンバー上にある同一MDBアプリケーションのすべてのサブスクライバは、同一のサブスクリプションを共有します。