このページでは、メッセージを順に受信する方法について説明します。
メッセージの受信の詳細については、サブスクライバーの概要をご覧ください。
メッセージを順に受信
メッセージに同じ順序指定キーがあり、同じリージョンに存在している場合、メッセージの順序指定を有効にすると、Pub/Sub サービスで受信する順序でメッセージを受信できます。
Pub/Sub は各メッセージを少なくとも 1 回配信するため、Pub/Sub サービスでメッセージが再度配信される可能性があります。メッセージを順序どおりに受信し、Pub/Sub サービスで順序指定キーのあるメッセージが再配信される場合、Pub/Sub では、同じ順序指定キーのある後続のメッセージも再配信することによって順序が維持されます。Pub/Sub サービスでは、こうしたメッセージが最初に受信した順序で再配信されます。
Pub/Sub サービスが順序指定キーを持つメッセージを再配信する場合は、確認済みメッセージを含む、同じ順序キーを持つメッセージもすべて再配信します。サブスクリプションで順序指定とデッドレター トピックの両方のメッセージが有効になっている場合は、Pub/Sub はデッドレター トピックにメッセージをベスト エフォートに基づき転送するため、これが正しくないこともあります。再配信されたメッセージを受信したら、これらのメッセージを再確認する必要があります。前のメッセージが確認応答されずに、後続のメッセージが送信される保証はありません。
順序指定キーとメッセージ配信
同じ順序指定キーを持つメッセージは、順序どおりに配信されます。
順序指定キーが異なるメッセージは順序どおりに配信されるとは限らず、パブリッシュ時間にも依存しません。
メッセージを確認できないと、他の順序指定キーのメッセージが配信できなくなる場合があります。この問題は、サーバーが予期せず再起動した場合や、トラフィックの変化が原因で使用されている一連のサーバーが変更された場合に発生することがあります。このようなイベント間で順序を保持するには、新しいサーバーからのメッセージを配信する前に、古いサーバーにパブリッシュされたすべてのメッセージに対し、順序指定キーが異なる場合でも確認応答する必要があります。 すべてのメッセージには適切なタイミングで確実に確認応答できない場合、サブスクリプションにデッドレター トピックを追加することを検討してください。デッドレター トピックに書き込まれるとき、メッセージの順序が保持されないことがあります。
メッセージの順序指定の有効化
メッセージを順に受信するには、メッセージを受信するサブスクリプションのメッセージ順序指定プロパティを設定します。メッセージを順に受信すると、レイテンシが増加する可能性があります。
Google Cloud コンソール、Google Cloud CLI、または Pub/Sub API を使用してサブスクリプションを作成するときに、メッセージの順序指定プロパティを設定できます。
Console
メッセージの順序指定プロパティがあるサブスクリプションを作成する手順は次のとおりです。
Google Cloud コンソールで、[サブスクリプション] ページに移動します。
[サブスクリプションを作成] をクリックします。
[サブスクリプション ID] を入力します。
メッセージを受信するトピックを選択します。
[メッセージの順序指定] セクションで、[順序指定キーを使用してメッセージの順序を指定する] を選択します。
[作成] をクリックします。
gcloud
メッセージの順序指定プロパティがあるサブスクリプションを作成するには、gcloud pubsub subscriptions create
コマンドと --enable-message-ordering
フラグを使用します。
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --enable-message-ordering
SUBSCRIPTION_ID をサブスクリプションの ID に置き換えます。
リクエストが成功すると、コマンドラインに確認メッセージが表示されます。
Created subscription [SUBSCRIPTION_ID].
REST
メッセージの順序指定プロパティがあるサブスクリプションを作成するには、次のような PUT
リクエストを送信します。
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth application-default print-access-token)
以下を置き換えます。
- PROJECT_ID: トピックがあるプロジェクトのプロジェクト ID
- SUBSCRIPTION_ID: サブスクリプション ID
リクエスト本文には、次のように指定します。
{ "topic": TOPIC_ID, "enableMessageOrdering": true, }
TOPIC_ID は、サブスクリプションに接続するトピックの ID に置き換えます。
リクエストが成功した場合のレスポンスは、JSON 形式のサブスクリプションになります。
{ "name": projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID, "topic": projects/PROJECT_ID/topics/TOPIC_ID, "enableMessageOrdering": true, }
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API のリファレンス ドキュメントをご覧ください。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
メッセージの順序設定プロパティを設定すると、Pub/Sub サービスでメッセージを受信する順序と同じ順序指定キーがあるメッセージが配信されます。たとえば、パブリッシャーが同じ順序指定キーがある 2 つのメッセージを送信する場合、Pub/Sub サービスでは最も古いメッセージが最初に配信されます。