2016-11-29 2 views
0

私はgRPC(javaバージョン)のv0.15で作業していましたが、クライアントが遅い場合、一部のデータが失われる可能性があるという問題に直面しました。私。サーバーは、5ミルの記録を発し、クライアントは約80パーセントを受け取ることができます。gRPC Java実装v0.15がデータを失った可能性がありますが、v1で修正されましたか?背圧?

このような状況に対処するには、マイクロサービス間の通信にgRPCを使用したい場合には、私に問題と思われるローカルの 'バッファ'を実装する必要がありました。

この問題はv1で修正されたのでしょうか?私はgRPCディスカッションの中で(グーグルで)対応する問題を見てきたことを覚えていますが、今はそれを見つけることができません。

私は何とかバックプレッシャーと相関していると思いますが、gRPCにバックプレッシャーが入っていますか?私のテストでは、io.netty.util.internal.OutOfDirectMemoryErrorで1.0.2が吹き飛ばします: バックプレッシャーを手動で実装する必要がありますか?

答えて

1

メッセージを送信しただけであっても、クライアントが受信したことを意味するものではありません。私はあなたの問題は、制御/背圧を流れるように関連していると思わ同意するだろう

No generic method for determining message receipt or providing acknowledgement is provided. Applications are expected to utilize normal payload messages for such signals, as a response naturally acknowledges its request.

:ClientCallとServerCall APIは、としてそれを記述します。 StreamObserverServerCallStreamObserverにキャストし、メモリ使用を制御するためにsetOnReadyHandler()isReady()を使用する必要があります。 brief example in an issue commentがあります。

+0

ありがとうございます。 onReadyHandlerについての大きなメモ。 –

+0

さらに考えてみる:grpcはtcpを通信に使うと信じている。つまり、クライアントが実際にすべてのデータを受け取っているということだ(他の場合は何らかのエラーが出るだろう)。クライアントが実際にすべてのエントリを持っていないことがどのようにすることができますか?私は何が欠けていますか? –

+0

TCPへの書き込みは、相手側が必ず受け取る前に完了します。書き込みに失敗しても、grpc-java APIは書き込み中に通知しません。代わりに、読み取り/応答中にエラーが発生します。 –

関連する問題