Pub/Sub を使用してメッセージを公開するために、パブリッシャー アプリケーションによってメッセージが作成され、トピックに送信されます。
このドキュメントでは、トピックとメッセージの概念など、パブリッシュ ワークフローの概要について説明します。
トピックについて
Pub/Sub のトピックは、メッセージのフィードを表す名前付きリソースです。 パブリッシャーがメッセージを送信するときは、特定のトピックをターゲットにします。Pub/Sub サービスは、このトピック名を使用して、トピックに接続されているすべてのサブスクリプションにメッセージをルーティングします。サブスクリプションに複数のサブスクライバーが存在する場合、サブスクリプション内の 1 つのサブスクライバーのみがメッセージを受信します。
パブリッシャーは、サブスクライバーの数を把握する必要はありません。トピックに焦点を当て、メッセージの送信とメッセージの受信を分離します。
Pub/Sub では、標準トピックとインポート トピックの 2 種類のトピックがサポートされています。
トピックのプロパティ
トピックを作成または更新するときに、トピックのプロパティを指定できます。
トピックのプロパティの詳細については、トピックのプロパティをご覧ください。
トピックのインポートについて
インポート トピックを使用すると、Pub/Sub は別のソースからストリーミング データを取り込み、トピックにデータを送信するパブリッシャー アプリケーションとして機能します。トピックの取り込みを有効にするには、コンソール、Google Cloud CLI、REST 呼び出し、またはクライアント ライブラリを使用します。インポート トピックの管理の一環として、 Cloud de Confiance by S3NS は取り込みパイプラインのモニタリングとスケーリングを提供します。
インポート トピックがない場合、データソースから Pub/Sub にデータをストリーミングするには、その他のサービスが必要になります。この追加サービスは、元のソースからデータを pull して Pub/Sub に公開します。追加サービスとしては、Apache Spark などのストリーミング エンジンやカスタム作成サービスなどがあります。また、このサービスの構成、デプロイ、実行、スケーリング、モニタリングも必要です。
インポート トピックに関する重要な情報を次に示します。
標準のトピックと同様に、インポート トピックに手動で公開できます。
インポート トピックに接続できる取り込みソースは 1 つのみです。
ストリーミング データのトピックをインポートすることをおすすめします。ストリーミング データの取り込みではなく BigQuery への バッチデータの取り込みを検討している場合は、 BigQuery Data Transfer Serviceを試すことができます。 Cloud Storage にデータを取り込む場合は、 Storage Transfer Service (STS)がおすすめです。
Pub/Sub は、インポート トピックの次のソースをサポートしています。
トピック内のデータ レプリケーション
Pub/Sub トピックは、3 つのゾーンを使用してデータを保存します。このサービスでは、少なくとも 2 つのゾーンに対する同期レプリケーションと、追加 の 3 つ目のゾーンに対するベスト エフォート レプリケーションをサポートします。Pub/Sub レプリケーションは 1 つのリージョン内でのみ行われます。
メッセージについて
Pub/Sub メッセージは、サービスを通じて移動するデータです。
メッセージは、メッセージ データとメタデータを含むフィールドで構成されます。メッセージには、メッセージ データまたは少なくとも 1 つの属性が含まれている必要があります。
メッセージ データ: メッセージのコア コンテンツであり、 任意のテキストまたはバイナリデータにできます。パブリッシャーとサブスクライバー間で伝達する実際の情報を表します。REST API を直接使用している場合、メッセージ データは Base64 でエンコードされている必要があります。[REST] タブの [メッセージをパブリッシュする] セクションの例をご覧ください。
順序指定キー: メッセージの順序指定が必要なエンティティを表す省略可能な 識別子です。 同じ順序指定キーを持つメッセージは、パブリッシュされた順序でサブスクライバーに配信されることが想定されます。順序指定されたメッセージ配信が必要な場合にのみ、順序指定キーが必要です。順序指定キーの詳細については、順序メッセージをご覧ください。
属性: メッセージに関する追加の コンテキストと情報を提供する省略可能な Key-Value ペアです。メッセージ コンテンツのルーティング、フィルタリング、エンリッチメントに使用できます。たとえば、タイムスタンプやトランザクション ID などの属性を追加できます。 メッセージのパブリッシュに使用される属性の詳細については、 属性を使用してメッセージをパブリッシュするをご覧ください。
Pub/Sub サービスは、次のフィールドをメッセージに追加します。
- トピックに一意のメッセージ ID
- Pub/Sub サービスがメッセージを受信した時点のタイムスタンプ
たとえば、JSON のメッセージ形式は次のようになります。
{
"data": "This is the core message content.",
"attributes": {
"category": "notification",
"user_id": "12345",
"priority": "medium"
},
"orderingKey": "12345"
}
Pub/Sub クライアント ライブラリを使用してメッセージをパブリッシュする場合は、Node.js Buffer などのバイト配列としてメッセージ data を指定します。データが文字列の場合は、クライアント ライブラリに渡す前に、UTF-8 エンコードなどを使用してバイトにエンコードする必要があります。
REST API を直接使用している場合、メッセージ データは Base64 でエンコードして文字列として送信する必要があります。
メッセージをパブリッシュするワークフロー
Pub/Sub を使用してメッセージをパブリッシュするために、パブリッシャー アプリケーションによってメッセージが作成され、トピックに送信されます。
- データを含むメッセージを作成します。
- パブリッシュ属性(オプション)を選択します。
- リクエストを Pub/Sub サーバーに送信し、指定されたトピックにメッセージをパブリッシュします。
Pub/Sub サービスはメッセージを受信し、次のように処理します。
メッセージは配信のために保存されます。
耐久性と高可用性を実現するために、メッセージは複数のゾーンに複製されます。
Pub/Sub は、メッセージのトピックに一致するサブスクリプションを持つサブスクライバーを識別し、メッセージのコピーを各サブスクライバーに配信します。
Pub/Sub では、既存のサブスクライバーに対して、メッセージの at-least-once 配信とベストエフォートの順序指定を実施しています。
Pub/Sub システムの詳細については、 Pub/Sub サービスの概要をご覧ください。
Pub/Sub の仕組みの詳細については、 Pub/Sub のアーキテクチャの概要をご覧ください。