2017-06-28 1 views
1

私は、自分のペースでGoogleのpubsubサブスクリプションを使用するサービスを実装しようとしています。それで、メッセージを消費する必要があるときに細かい制御が必要なことを意味します。メッセージのバッチを取得し、しばらく停止し、Xメッセージ以上を取得しないようにしてください...Google pubsubフロー制御

Googleクライアントライブラリを使用していますMessageReceiverが独自のスレッドで実行されているので、それを行う方法であり、何が起こったのかについては何も制御していません。

基本的に、同期的な方法でメッセージを消費することができれば、私の問題は解決します。

googleクライアントライブラリを同期して使用する方法をご存知ですか?それとも、私が見逃したAPIに別の方法がありますか?

答えて

1

サブスクライバの作成時にsetFlowControlSettingsを試してみるとよいでしょう。特に、setMaxOutstandingElementCountまたはsetMaxOutstandingRequestBytesを使用して、MessageReceiverに送信されるメッセージを制限することができます。十分な未処理のメッセージ、つまりAck()またはNack()を呼び出していないメッセージがある場合、これらの制限を超えると、メッセージが受信または停止されるまでMessageReceiverは呼び出されません。

+0

私はあなたに同意します、そして、私は今日早くそれを試しましたが、それはすべての私の問題を解決するわけではありません。たとえば、stopAsyncを実行せずにメッセージの取得を一時停止するにはどうすればよいですか?私はまた、最大X秒の時間枠内でmax Xメッセージで必要なものを行う必要があります。 –

+0

より厳密な制御が必要な場合は、gRPCまたはRESTライブラリを直接使用する必要があります。 [サービスAPIの概要](https://cloud.google.com/pubsub/docs/reference/service_apis_overview)にはさらに詳しい情報があります。 –

+0

それは私が避けたかったルートですが、私は選択肢がないと思います。 –