取得 "スレッド" main "の例外Java.io.IOException:サーバーがHTTP応答コードを返しました:URLの503"エラーAmazon Product AdvertisingAPIを複数回呼び出すとき。
サービスが過負荷になっている理由はありますか?考えられる解決策の1つは、Thread.Sleep(milliseconds)メソッドを使用することです。
しかし、他にもっと洗練された解決策はありますか?プロキシか何かのように?
接続に使用されるコードは次のとおりです。
URL Amazon = new URL(url);
URLConnection yc = Amazon.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
私はJavaを使用しています!
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html から、これらのステータスコードを定義します。
10.5.4503サービスを利用できません
サーバーの一時的な過負荷またはメンテナンスのため、サーバーは現在リクエストを処理できません。これは一時的な状態であり、少し遅れて緩和されることを意味します。既知の場合、遅延の長さはRetry-Afterヘッダーに示される場合があります。 Retry-Afterが指定されていない場合、クライアントは500応答の場合と同じように応答を処理する必要があります。注:503ステータスコードの存在は、サーバーが過負荷になったときにそれを使用する必要があることを意味するものではありません。一部のサーバーは、単に接続を拒否したい場合があります。
そうです、サーバーの過負荷が原因である可能性があります。これに対処する方法を理解するには、サービスを操作する人と話し合い、彼らが何を許容できるかを理解する必要があります。次に、SOで「スロットルWebリクエスト」を検索すると、要件がわかったら、スロットルを実装する方法についての多くの議論が見つかります。
編集
Amazon Advertising APIについて話していることがわかったので、クイック検索で次のページに移動しました: http://docs.aws.Amazon.com/AWSECommerceService/latest/DG/TroubleshootingApplications.html
そのページの効率ガイドラインは、問題の引き金となるものと、許容できる要求率をかなり明確に示しています。
HTTP 503は、要求されたサービスが利用できないことを意味します。
それは、
1)サーバーがビジーである可能性があります
2)サーバーがメンテナンスのためにダウンしている可能性があります
service
にアクセスしていてこのエラーが発生した場合は、service
の所有者に連絡して、何が起こっているのかを調べてください。
サービスの所有者である場合は、ログのエラーをチェックして問題を見つけてください。
クライアントクラスからサービスに大量の接続を確立しているだけで、このエラーが発生する場合は、なぜこれほど多くの接続を作成する必要があるのかを考える必要があります。