NoSQLSubscriptionConfigの使用方法

サブスクリプションを構成するには、oracle.kv.pubsub.NoSQLSubscriptionConfigオブジェクトを構築します。その後、このオブジェクトをNoSQLSubscriber実装に提供し、さらに、コールされたときにこのオブジェクトを返すNoSQLSubscriber.getSubscriptionConfig()を実装します。パブリッシャを作成する際には、それにNoSQLSubscriber実装を提供します。これにより、パブリッシャはNoSQLSubscriber.getSubscriptionConfig()を呼び出します。サブスクリプションの作成方法を理解するには、「サブスクライバの実装」および「Streamsパブリッシャの使用方法」を参照してください。

単一サブスクライバの構成:

NoSQLSubscriptionConfigオブジェクトを構築するには、次のようにNoSQLSubscriptionConfig.Builderを使用します。

final NoSQLSubscriptionConfig subConfig =
    new NoSQLSubscriptionConfig.Builder("ChkptTable")
    .setSubscribedTables("UserTable")
    .setStreamMode(NoSQLStreamMode.FROM_NOW)
    .build(); 

サブスクライバ・グループの一部としての複数のシャード・サブスクライバの構成:

サブスクライバ・グループのシャード・サブスクライバに対してNoSQLSubscriptionConfigオブジェクトを構築するには、マッパー関数の単一パラメータを持つNoSQLSubscriptionConfig.Builderクラスのコンストラクタを使用します。この関数は、グループ内の各サブスクライバIDから計算された個別のチェックポイント表名を返します。シャード・サブスクライバを構成するためのBuilderクラスのサンプル・コンストラクタを次に示します。
public void Builder(Function<NoSQLSubscriberId, String> ckptTableMapper);
シャード・サブスクライバのNoSQLSubscriptionConfigオブジェクトは、次のように作成できます:
/** 
* Configures a sharded subscriber
* @param subscriberId subscriber id  
* @param tables subscribed tables 
*/
void configureShardedSubscribers(NoSQLSubscriberId subscriberId, Set<String> tables) {
final NoSQLSubscriptionConfig conf = 
    new NoSQLSubscriptionConfig.Builder( id -> buildCkptTableName(id) 
    .setSubscribedTables(tables)
    .setSubscriberId(subscriberId)
    .build();
}

buildCkptTableNameでサブスクライバIDをStreamCheckpointTableに連結してサブスクライバIDからチェックポイント名を生成するコード・スニペットの例を次に示します。これは、マッパー関数を使用する1つの方法です。アプリケーションは、サブスクライバごとに一意のチェックポイント表名を返すかぎり、独自のマッパー関数を作成できます。

マッピングは、特定のデータ・ストア・インスタンスではなく、XRegionエージェント・グループの存続期間中静的である必要があります。つまり、データ・ストアでは、マッピング関数を使用して3つのエージェントのグループを作成できます。その後、エージェントを停止し、別のマッピング機能を持つ別のエージェント・グループを作成できます。これらの2つのグループは、異なるチェックポイント表のセットを使用するため、競合はありません。
/**
 * Builds stream checkpoint table from given subscriber id
 * @param subscriberId subscriber id
 * @return stream checkpoint table name for that subscriber
 */
private String buildCkptTableName(NoSQLSubscriberId subscriberId) {
    return "StreamCheckpointTable" + subscriberId.toString();
}
この構成により、サブスクリプションは次のように動作します。
  • ChkptTableというチェックポイント表を使用します。この表は自動的に作成されます。チェックポイント表の詳細は、チェックポイントの使用方法を参照してください。ここで使用する表名は、自分で選択し、サブスクリプションに対して一意である必要があります。複数のサブスクリプションを使用する場合は、各サブスクリプションでチェックポイント表に一意の名前を使用する必要があります。

    セキュアなストアを使用する場合、チェックポイント表への読取り/書込みアクセス権が必要です。チェックポイント表が存在しない場合は、CREATE TABLE権限も必要です。詳細は、次を参照してください。
    • セキュアなストアへの接続の詳細は、セキュアなストアへの認証を参照してください。

    • セキュアなストアの認可を構成する方法の詳細は、セキュリティ・ガイド権限を参照してください。

  • UserTableというユーザー表に対して実行されたすべてのwriteアクティビティをサブスクライブします。サブスクリプションは、ユーザー定義の表について作成できます。システム表に対する更新はストリーミングされません。次を使用して、複数の表をサブスクライブできます。

    new NoSQLSubscriptionConfig.Builder("ChkptTable")
     .setSubscribedTables("UserTable", "PriceTable", "InventoryTable") .... 

    setSubscribedTables()をコールしない場合、サブスクリプションはストア内のすべての表をサブスクライブします。サブスクリプションがストア内のすべての表を対象とする場合、サブスクリプションが設定された後に(DDL CREATE TABLE操作を使用して)新しい表が作成されると、新しい表に作成されたそれぞれの行のputイベントすべてがストリームに含まれます。

  • ストリーム・モードをNoSQLStreamMode.FROM_NOWに設定します。ストリーム・モードは、パブリッシャがイベントの取得を開始するストリーム内の位置を示します。詳細は、NoSQLStreamModeを参照してください。

サブスクリプション構成を作成したら、それをNoSQLSubscriber実装に提供します。その実装でその後、次のようにNoSQLSubscriber.getSubscriptionConfig()メソッドを使用してそれを使用できるようにする必要があります:

class mySubscriber implements NoSQLSubscriber {
    ...
    private final NoSQLSubscriptionConfig config;
    ...
    // Generally the constructor will require more than just
    // the subscription configuration. The point here is that you
    // must somehow provide the configuration object to
    // your subscriber implemention because that is how
    // your publisher will get it.
    mySubscriber(NoSQLSubscriptionConfig config, ....) {
        ...
        this.config = config;
        ...
    }
    @Override
    public NoSQLSubscriptionConfig getSubscriptionConfig() {
        return config;
    }  
    ...

Streamsアプリケーションを実装する際に、サブスクライバ実装を使用します。サブスクライバに対するgetSubscriptionConfig()メソッドにより、パブリッシャは、監視する表などを理解します。Streamsパブリッシャの使用方法を参照してください。

NoSQLSubscriptionConfig.setEmptyStreamDuration()メソッドを使用すると、空のストリームの有効期限を指定できます。有効期限は、ストリームが空になったときにのみ開始され、その期限がすぎると、パブリッシャは空のストリームを停止します。空のストリームのデフォルトの有効期限は60秒です。setEmptyStreamDuration()メソッドを使用すると、デフォルトの空のストリームの有効期限をオーバーライドできます。

この「NoSQLSubscriptionConfigの使用方法」の項では、NoSQLSubscriptionConfigを使用して設定できるいくつかのオプションについてのみ説明します。変更前イメージのストリーミングやトランザクション・イベントのストリーミングなどの機能をオプションで構成できます。詳細は、「変更前イメージのストリーミングの構成」および「トランザクション・イベントのストリーミングの構成」を参照してください。

ノート:

Streams APIでは、変更前イメージとトランザクション・イベントのストリーミングを同時に構成することもできます。つまり、トランザクション・イベントをストリーミングし、トランザクション・イベントの各操作の変更前イメージも含めることができます。ただし、その表に対して変更前イメージが有効で、有効期限内である場合です。

構成オプションの完全なリストは、Java Direct Driver APIリファレンスNoSQLSubscriptionConfigおよびNoSQLSubscriptionConfig.Builderを参照してください。