4

Drive SDK の呼び出しが 500 エラーで定期的に失敗することに気付きました。通常、要求を再試行すると、エラーはすぐに修正されます。Google のドキュメントを見ると、指数関数的なバックオフ手法の使用が推奨されており、問題なく動作する独自の実装を作成しましたが、デバッグ中にたまたまインターフェイス BackOffPolicy にぶつかり、さらに調査したところ、ExponentialBackOffPolicy の実装も見つかりました。

したがって、これを自分で管理する代わりに、実装を削除して SDK に任せるのが最善だと考えました。バックオフ ポリシーは (私の知る限り) 構築された HTTP リクエストで設定できるため、手動でリクエストを構築する場合やバッチ リクエストを使用する場合は非常に簡単に使用できますが、コア SDK を使用する場合、これを挿入する最も簡単な場所を見つけることができないようです。 、たとえば、次のバックオフ ポリシーを設定する場合:

drive.files().get(id).execute();

次のようなことはできません。

drive.files().get(id)
     .setBackOffPolicy(new ExponentialBackOffPolicy())
     .execute();

私はこれを行う必要があります:

drive.files().get(id)
     .buildHttpRequest()
     .setBackOffPolicy(new ExponentialBackOffPolicy())
     .execute();

ただし、そうすると、Drive.Files.Get の execute メソッドの解析ロジックを再現し、結果を File オブジェクトに変換する必要がありますが、これは明らかに理想的な方法ではありません。これを「一般的に」リクエストに追加する簡単な方法、またはすべてのリクエストに対してデフォルトのバックオフポリシーを設定する方法はありますか?

そうでない場合、これは Drive SDK の将来のバージョンに導入される可能性がありますか?

ありがとう、デビッド

4

3 に答える 3

2

Google Drive SDK ドキュメントには、Drive API を使用して指数バックオフを正しく実装する方法を示す例が含まれています。

https://developers.google.com/drive/handle-errors

于 2012-10-08T23:29:31.400 に答える
0

私の知る限り、Google が作成した Exponential Backoff は、ドライブ Java API でコンテンツをダウンロードまたはアップロードする場合にのみ使用されます。他のリクエストには独自の実装が必要です。

リクエストに対して実装するために私が行ったことは、リクエストを一度実行し、ラッパークラスに例外処理とリクエストの繰り返しを実行させる Callable をラップすることです。

于 2012-10-10T21:29:25.380 に答える