20 トピックの構成
coherence-cache-config.xmlファイルで構成の変更を行います。
この項には次のトピックが含まれます:
- トピック・マッピングの定義
トピック・マッピングは、トピック名をページ・トピック・スキーム定義にマップします。 - 分散トピック・スキームの定義
トピック・スキームを使用して、アプリケーションで使用可能なトピック・サービスを定義します。
親トピック: トピックの使用
トピック・マッピングの定義
トピック・マッピングは、<topic-scheme-mapping>ノード内の<topic-mapping>要素を使用して定義されます。トピック・マッピングは必要な数だけ作成できます。トピック・マッピングには、トピック名とトピック名のマップ先のスキーム名を含める必要があります。「topic-mapping」構成要素を参照してください。
この項には次のトピックが含まれます:
正確なトピック・マッピングの使用
正確なトピック・マッピングは、特定のトピック名をページ・トピック・スキーム定義にマップします。アプリケーションでトピックを使用するには、マッピングで指定されたとおりの名前で指定する必要があります。スラッシュ(/)とコロン(:)は予約文字であり、トピック名では使用できません。例20-1では、トピック名exampleTopicをスキーム名topic-schemeのpaged-topic-scheme定義にマップする単一トピック・マッピングを作成します。
例20-1 正確なトピック・マッピングのサンプル
<?xml version="1.0"?>
<cache-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
<topic-scheme-mapping>
<topic-mapping>
<topic-name>exampleTopic</topic-name>
<scheme-name>topic-scheme</scheme-name>
</topic-mapping>
</topic-scheme-mapping>
<caching-schemes>
<paged-topic-scheme>
<scheme-name>topic-scheme</scheme-name>
<service-name>DistributedTopicService</service-name>
</paged-topic-scheme>
</caching-schemes>
</cache-config>
親トピック: トピック・マッピングの定義
名前パターン・トピック・マッピングの使用方法
名前パターン・トピック・マッピングを使用すると、アプリケーションでトピック名を指定する際にパターンを使用できます。パターンではアスタリスク(*)ワイルドカードを使用できます。名前パターンを使用することで、アプリケーションでトピックの正確な名前を認識する必要がなくなります。スラッシュ(/)とコロン(:)は予約文字であり、トピック名では使用できません。例20-2では、トピック・マッピングを2つ作成します。最初のマッピングでは、ワイルドカード(*)を使用して、任意のトピック名をbasic-topic-schemeというスキーム名のページ・トピック・スキーム定義にマップします。2番目のマッピングでは、名前パターンaccount-*をaccount-topic-schemeというスキーム名のページ・トピック・スキーム定義にマップします。
例20-2 トピック名パターン・マッピングのサンプル
<?xml version="1.0"?>
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
<topic-scheme-mapping>
<topic-mapping>
<topic-name>*</topic-name>
<scheme-name>basic-topic-scheme</scheme-name>
</topic-mapping>
<topic-mapping>
<topic-name>account-*</topic-name>
<scheme-name>account-topic-scheme</scheme-name>
<service-name>accountDistributedTopicService</service-name>
</topic-mapping>
</topic-scheme-mapping>
<caching-schemes>
<paged-topic-scheme>
<scheme-name>basic-topic-scheme</scheme-name>
</paged-topic-scheme>
<paged-topic-scheme>
<scheme-name>account-topic-scheme</scheme-name>
</paged-topic-scheme>
</caching-schemes>
</cache-config>
最初のマッピングでは、アプリケーションでのトピックの作成時に任意の名前が使用可能であり、その名前がbasic-topic-schemeというスキーム名のページ・トピック・スキーム定義にマップされます。2番目のマッピングでは、アプリケーションでトピック名を指定する際に、パターンを使用する必要があります。この例の場合は、名前の前に接頭辞account-を付ける必要があります。たとえば、トピック名としてaccount-overdueを指定するアプリケーションは、account-topic-schemeというスキーム名のページ・トピック・スキーム定義を使用します。
例20-2に示されているように、複数のトピック・マッピングに一致するトピック名(たとえば、account-overdue)を持つことが可能です。このような場合、正確なトピック・マッピングで定義されているものがあると、それがワイルドカードの一致よりも優先されて常に選択されます。複数のワイルドカードの一致の中で、最後に一致したワイルドカード・マッピング(ファイルで定義された順番に基づく)が選択されます。そのため、あまり限定的でないワイルドカード・パターンをファイルの先に定義し、ファイル後方のより限定的なワイルドカード・パターンでオーバーライドされるようにするのが一般的です。
トピック名とキャッシュ名には異なるネームスペースがあることに注意してください。
親トピック: トピック・マッピングの定義
サブスクライバ・グループ
トピックは、そのトピックのtopic-mappingで定義された0、1またはそれ以上の恒久サブスクライバ・グループを持つことができます。サブスクライバ・グループはトピックとともに作成され、データがトピックにパブリッシュされる前に存在することが保証されます。サブスクライバ・グループは、そこからの値を処理する0、1またはそれ以上のサブスクライバ・グループ・メンバーを持つことができます。サブスクライバ・グループに複数のサブスクライバを作成すると、恒久サブスクライバ・グループによって収集されたすべての値のパラレル分散処理が可能になります。サブスクライバが存在しない場合、サブスクライバ・グループは、将来のサブスクライバが各値を使用できるように値を保持します。
ノート:
サブスクライバがグループに参加するために、サブスクライバ・グループがトピックのtopic-mappingに定義されている必要はありません。構成済の動的なサブスクライバ・グループの詳細は、「NamedTopicのサブスクライバ・グループ」を参照してください。
例20-3 恒久サブスクライバ・グループのサンプル
<?xml version="1.0"?>
<cache-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
<topic-scheme-mapping>
<topic-mapping>
<topic-name>exampleTopic</topic-name>
<scheme-name>topic-scheme</scheme-name>
<subscriber-groups>
<subscriber-group>
<name>durableSubscription</name>
</subscriber-group>
<subscriber-groups>
</topic-mapping>
</topic-scheme-mapping>
<caching-schemes>
<paged-topic-scheme>
<scheme-name>topic-scheme</scheme-name>
<service-name>DistributedTopicService</service-name>
</paged-topic-scheme>
</caching-schemes>
</cache-config>
親トピック: トピック・マッピングの定義
分散トピック・スキームの定義
トピック・スキームは<caching-schemes>要素で定義されます。<paged-topic-scheme>スキーム要素とそのプロパティを使用して、そのタイプのトピックを定義します。
分散トピック定義のサンプル
<paged-topic-scheme>要素は、分散トピックの定義に使用されます。分散トピックでは、分散(パーティション)トピック・サービス・インスタンスを使用します。キャッシュ構成ファイルで、分散トピックを必要な数だけ定義できます。「paged-topic-scheme」を参照してください。
例20-4では、distributed-topicをスキーム名として使用し、トピック名example-topicにマップされる基本的な分散トピックを定義しています。<autostart>要素をtrueに設定すると、キャッシュ・サーバー・ノード上でサービスを開始します。
例20-4 分散トピック定義のサンプル
<?xml version="1.0"?>
<cache-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
<topic-scheme-mapping>
<topic-mapping>
<topic-name>example-topic</topic-name>
<scheme-name>distributed-topic</scheme-name>
<value-type>java.lang.String</value-type>
</topic-mapping>
</topic-scheme-mapping>
<caching-schemes>
<paged-topic-scheme>
<scheme-name>distributed-topic</scheme-name>
<service-name>distributed-topic-service</service-name>
<autostart>true</autostart>
</paged-topic-scheme>
</caching-schemes>
</cache-config>
ノート:
<topic-mapping>の<value-type>サブ要素はオプションで、トピックの値の処理で拡張汎用タイプ・チェックを有効にする場合にのみ指定する必要があります。トピックの取得時にValueTypeAssertionを指定する方法は、「トピック・インスタンスの取得」を参照してください。
この項には次のトピックが含まれます:
サイズ制限のあるトピック
<paged-topic-scheme>要素に<high-units>サブ要素を追加すると、トピック用に保持される値の記憶域サイズが制限されます。この記憶域制限に達すると、トピックはフルとみなされます。この高水位標を超えないことは、デフォルトでフロー制御を使用して管理されます。サブスクライバで、トピックに保持されている未処理の値の処理が遅延している場合、使用可能な領域ができるまでパブリッシャが制限されます。「トピック記憶域に上限を設定するためのパブリッシャ・フロー制御の管理」を参照してください。
親トピック: 分散トピック・スキームの定義
期限切れが近い値があるトピック
<paged-topic-scheme>要素に<expiry-delay>サブ要素を追加すると、Subscriberで受信されるのを待機しているパブリッシュされた値がトピックに存続する時間が制限されます。
親トピック: 分散トピック・スキームの定義
トピック値の記憶域オプション
<storage>サブ要素を使用すると、on-heap、ramjournalおよびflashjournalを指定して、トピックの値とメタデータを格納できます。ramjournalオプションおよびflashjournalオプションの詳細は、「エラスティック・データ機能を使用したデータの保存」を参照してください。
親トピック: 分散トピック・スキームの定義
トピック値シリアライザ
<paged-topic-scheme>要素の<serializer>サブ要素では、事前定義のシリアライザpofまたはjava (デフォルト)を指定できます。serializerを参照してください。
親トピック: 分散トピック・スキームの定義
永続トピック
トピックに対してアクティブ永続性が構成されており、クラスタ全体が再起動される場合、永続性リカバリ操作中に、サブスクライバおよびサブスクライバ・グループに関するトピックで未処理の未使用値がリカバリされます。<paged-topic-scheme>要素の次のサブ要素は、トピックが永続的であるかどうかを構成します。オプションのtransientサブ要素は、デフォルトのfalseである必要があります。オプションのpersistence.environmentサブ要素は、事前定義済またはカスタムの永続性環境を参照します。例21-2に構成例を示します。
親トピック: 分散トピック・スキームの定義