2016-12-08 13 views
0

CXFサービスには、gzippedファイルをアップロードして処理するPOSTメソッドがあります。アップロードされたファイルが大きければ、サービスによって10分以上処理されます。問題は、クライアントが10分後に504(ゲートウェイタイムアウト)応答を受信することです。
重要なことは、データが高速にアップロードされるが、処理時間が長く、クライアントがデータが完全に処理されるまで待機しないことです。
マルチパートをストリーミングして接続が突然閉じないようにする方法はありますか?
添付ファイルからストリームを完全に読み取らないようにする方法がありますが、cnunkでそれを読み取る方法がありますか?
このタイムアウトを設定する方法がありますか?ファイル投稿するCXFでのマルチパートの長時間処理により、504(タイムアウト)が発生する

@POST 
@Consumes("multipart/form-data") 
@Produces("application/json") 
@Path("/gzip") 
UploadResult uploadGzip(
    @Multipart("data") Attachment attachment, 
    @QueryParam("default-expiration-period") @Nullable String defaultExpirationPeriod 
) throws NotAcceptableException, BadRequestException { 
    String filename = attachment.getContentDisposition().getParameter("filename"); //filename is important 
    InputStream inputStream = attachment.getDataHandler().getInputStream(); 

    return readAndProcess(filename, inputStream); 
} 

とHTML形式::

サービス

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Dump factors</title> 
    </head> 
    <body> 
     <form method="POST" enctype="multipart/form-data" 
       action="https://myserver.com/api/data/gzip"> 
      File to upload: <input type="file" name="data"><br/> 
      <br/> 
      <input type="submit" value="Press"> to upload the file! 
     </form> 

    </body> 
</html> 

答えて

0

チャンキングは、データ転送レベルで行われ、クライアントに隠されています。 マルチパートはアプリケーションレベルで管理されます。マルチパートのhttpメッセージは、必要に応じてサーバーによるチャンクエンコーディングを使用して転送できます。詳細を参照してくださいhere

CXF configuration levelReceiveTimeoutを使用すると、接続がタイムアウトする前にサービスが要求を受信しようとする時間をミリ秒単位で設定できます。設定が

このような
<http-conf:destination name="{http://apache.org/hello_world_soap_http}SoapPort.http-destination"> 
     <http-conf:server ReceiveTimeout="0" /> 
    </http-conf:destination> 

に見えるはずですタイムアウトなし

ために0を設定すると、接続タイムアウトパラメータは、アプリケーションサーバに設定することができ、接続を制限することができることを考慮してください。

関連する問題