9.2.23 Google Pub/Sub

9.2.23.1 概要

Pub/Subでは、約100ミリ秒の待機時間で、サービスが非同期式で通信できます。

Pub/Subでは、パブリッシャおよびサブスクライバと呼ばれるイベント・プロデューサおよびコンシューマのシステムを作成できます。パブリッシャは、同期リモート・プロシージャ・コール(RPC)ではなく、イベントをブロードキャストすることでサブスクライバと非同期式で通信します。

パブリッシャにより、イベントが、これらのイベントの処理方法や処理時期に関係なく、Pub/Subサービスに送信されます。その後、Pub/Subにより、イベントが、それらに反応するすべてのサービスに配信されます。RPCを介して通信するシステムでは、パブリッシャは、サブスクライバがデータを受信するまで待機する必要があります。しかしながら、Pub/Subでの非同期統合により、システム全体の柔軟性と堅牢性が向上します。

9.2.23.2 詳細な機能

トランザクション・モード

次の構成では、Google PubSubハンドラがトランザクション・モードに設定されます: gg.handler.name.Mode=tx。トランザクション・モードでは、ソースOracle GoldenGate証跡ファイルからのトランザクションにおける各操作のシリアライズ・データが連結されます。この連結された操作データの内容は、Google Pubsubメッセージの値です。結果として、このメッセージには1からNまでの操作のデータが含まれます。ここでのNは、そのトランザクションにおける操作の数です。

操作モード

次の構成では、Google PubSubハンドラが操作モードに設定されます: gg.handler.name.Mode=op

操作モードでは、操作ごとのシリアライズ・データが、個々のGoogle Pubsubメッセージにその値として配置されます。つまり、着信操作と、生成されるGoogle Pubsubメッセージの数との間には、1対1の関係があります。

9.2.23.3 Google PubSubハンドラの設定と実行

クラスパスの構成

Google PubSubハンドラがGoogle PubSubに接続して動作するためには、プロパティ・ファイルおよびGoogle PubSubクライアントJARがgg.classpath構成変数で構成されている必要があります。GooglePubSub jarファイルを入手するには、依存性ダウンローダ・ツールを使用します。

Google PubSubのプロパティ・ファイルの格納場所としてお薦めしているのは、Oracle GoldenGateのdirprmディレクトリです。gg.classpathは、正確に構成する必要があります。

Google PubSubのプロパティ・ファイルのパスには、ワイルドカードが付加されていないパスを使用してください。このプロパティ・ファイルのパスにワイルドカード(*)を含めると、このファイルが選択されません。逆に、依存性JARのパスには、関連するクラスパスにそのディレクトリにあるすべてのJARファイルが含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。正しく構成されたクラスパスの例を次に示します: gg.classpath={google PubSub install dir}/libs/*

9.2.23.4 ハンドラ認証の構成

Google PubSubからダウンロードしたJSONファイル内の資格証明を使用してGoogle PubSubハンドラ認証を構成する必要があります。

資格証明ファイルをダウンロードします。

  1. cloud.google.comでGoogleアカウントにログインします。
  2. 「コンソール」をクリックし、プロジェクトを選択できるダッシュボードに移動します。
  3. ナビゲーション・メニューで、「APIs & Services」をクリックしてから、「Credentials」を選択します。
  4. 「Create Credentials」メニューから、「Service account key」を選択します。
  5. 「JSON key」タイプを選択して、ご使用のシステム用のJSON資格証明ファイルをダウンロードします。

gg.handler.name.credentialsFile構成プロパティを使用して、プロパティ・ファイル内にその資格証明ファイルへのパスを指定します。

資格証明ファイルのパスには、ワイルドカードが付加されていないパスを使用してください。資格証明ファイルへのパスに*ワイルドカードを含めると、ファイルが認識されません。

Google PubSub資格証明ファイルの構成サンプル:

{
  "type": "<accountType>",
  "project_id": "<projectType>",
  "private_key_id": "<privateKeyId>",
  "private_key": "<privateKey>",
  "client_email": "<googleCloudSubscriptionEmailId>",
  "client_id": "<subscriptionClientId>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "",
  "client_x509_cert_url": ""
}

9.2.23.5 Google PubSubハンドラ構成

プロパティ名 必須/オプション プロパティ値 デフォルト 説明
gg.handlerlist 必須 名前(任意の名前を選択) なし 使用するハンドラのリスト
gg.handler.name.type 必須 oracle.goldengate.handler.googlepubsub.GooglePubsubHandler なし 使用するハンドラのタイプ
gg.handler.name.format オプション フォーマッタ・クラスまたはショート・コード json ペイロードのフォーマットに使用するフォーマッタ。xmldelimitedtextjsonjson_rowavro_rowまたはavro_opのいずれかです
gg.handler.name.credentialsFile 必須 絶対パスでのjson形式の資格証明ファイルの名前 json 該当なし
gg.handler.name mode オプション tx/op tx 該当なし
gg.handler.name.topicMappingTemplate 必須 該当なし 該当なし Replicatによるメッセージ公開先となるGoogle PubSubトピック名。詳細は、「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照してください
gg.handler.name.projectName 必須 該当なし 該当なし Google PubSubプロジェクト名
gg.handler.name.batchProcessing オプション true/false false 有効にした場合は、メッセージがバッチで処理されるようになり、Replicatのパフォーマンスが向上します。
gg.handler.name.requestBytesThreshold オプション 数値の整数 1000 最大バイト数の指定による、パブリッシュ・リクエストの最大サイズ
gg.handler.name.messageCountBatchSize オプション 数値の整数 100 最大メッセージ数の指定による、パブリッシュ・リクエストの最大サイズ
gg.handler.name.publishDelayThreshold オプション 数値の整数 100 バッチを送信するまでの待機時間(具体的に述べると、バッチを満たすためにメッセージを保持する時間)を柔軟に制御できます。この値を小さくすると、待機時間が改善されます。このプロパティ値は、バッチ時間間隔(ミリ秒単位)です。
gg.handler.name.attributesTemplate オプション 属性キーワードのカンマ区切りリスト。 なし メッセージの様々なプロパティを、google pubsubメッセージの属性として設定できます。これにより、ユーザー/サブスクライバが、設定した属性に基づいてメッセージを簡単にフィルタできます。このプロパティの構成の詳細は、「メタ列のキーワード」を参照してください。
gg.handler. name.orderingKeyMappingTemplate オプション

実行時にpubsubメッセージ順序キーを解決するためのテンプレート文字列値。

トランザクション・モードの実行時には、静的なorderingKeyを使用してメッセージが順序付けられます。

なし 詳細は、「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照してください

9.2.23.6 プロキシ設定

プロキシ・サーバーを使用してGoogle PubSubに接続するには、次のようにプロパティ・ファイル内でプロキシ・ホストおよびプロキシ・ポートを構成する必要があります:
jvm.bootoptions= -Dhttps.proxyHost=proxy_host_name -Dhttps.proxyPort=proxy_port_number

9.2.23.7 サンプル構成

次に、Google PubSubハンドラのサンプル構成を示します:
gg.handlerlist=pubsub
#The Google Pub/Sub Handler
gg.handler.pubsub.type=googlepubsub
gg.handler.pubsub.mode=op
#Set the path to the JSON credenials file
gg.handler.pubsub.credentialsFile=
#Set the template to resolve the topic name
gg.handler.pubsub.topicMappingTemplate=
#Set the project name
gg.handler.pubsub.projectName=
#Set the template to resolve the order key
gg.handler.pubsub.orderingKeyMappingTemplate=
gg.handler.pubsub.format=json_row
gg.handler.pubsub.format.metaColumnsTemplate=${objectname[table]},${optype[op_type]},${timestamp[op_ts]},${currenttimestamp[current_ts]},${position[pos]}

9.2.23.8 Google PubSub依存性

Google PubSubクライアント・ライブラリは、Google PubSubとの統合に必要です。Maven座標は次のとおりです。

Maven groupId: com.google.cloud

Maven artifactId: google-cloud-pubsub

バージョン: 1.129.3
api-common-2.31.0.jar
guava-33.1.0-jre.jar
protobuf-java-util-3.25.3.jar
listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
proto-google-iam-v1-1.34.0.jar
threetenbp-1.6.9.jar
google-cloud-pubsub-1.129.3.jar
opencensus-proto-0.2.0.jar
google-http-client-gson-1.44.1.jar
grpc-protobuf-lite-1.62.2.jar
grpc-util-1.62.2.jar
javax.annotation-api-1.3.2.jar
checker-qual-3.42.0.jar
error_prone_annotations-2.26.1.jar
gax-grpc-2.48.0.jar
httpcore-4.4.16.jar
proto-google-common-protos-2.39.0.jar
google-auth-library-oauth2-http-1.23.0.jar
opencensus-contrib-http-util-0.31.1.jar
protobuf-java-3.25.3.jar
proto-google-cloud-pubsub-v1-1.111.3.jar
grpc-api-1.62.2.jar
perfmark-api-0.27.0.jar
gax-2.48.0.jar
jsr305-3.0.2.jar
conscrypt-openjdk-uber-2.5.2.jar
failureaccess-1.0.2.jar
grpc-inprocess-1.62.2.jar
grpc-grpclb-1.62.2.jar
grpc-netty-shaded-1.62.2.jar
google-http-client-1.44.1.jar
grpc-core-1.62.2.jar
j2objc-annotations-3.0.0.jar
commons-codec-1.16.1.jar
gson-2.10.1.jar
grpc-auth-1.62.2.jar
google-auth-library-credentials-1.23.0.jar
grpc-services-1.62.2.jar
grpc-context-1.62.2.jar
animal-sniffer-annotations-1.23.jar
opencensus-api-0.31.1.jar
gax-httpjson-2.48.0.jar
auto-value-annotations-1.10.4.jar
grpc-stub-1.62.2.jar
annotations-4.1.1.4.jar
grpc-xds-1.62.2.jar
grpc-alts-1.62.2.jar
grpc-googleapis-1.62.2.jar
httpclient-4.5.14.jar
re2j-1.7.jar
grpc-protobuf-1.62.2.jar