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) {
   finalNoSQLSubscriptionConfig conf = 
     newNoSQLSubscriptionConfig.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を使用して設定できる一部のオプションのみを示しています。構成オプションの完全なリストは、Java Direct Driver APIリファレンスNoSQLSubscriptionConfigおよびNoSQLSubscriptionConfig.Builderを参照してください。