2017-07-06 7 views
0

が増加した場合Substreamをソースは私が中2 entitesを非整列化しようとしています、私はここでアッカのhttp -ERROR:ペイロードサイズは

val route = (path(HttpConstants.CreateJob) & post) { 
    (entity(as[JobDetailsEntity]) & entity(as[JobEntity])) { 
     (jobDetailsEntity: JobDetailsEntity, jobEntity: JobEntity) => 
     val updatedJobEntity = jobEntity.copy(runningSince = DateTime.now().getMillis) 
     val updatedJobDetailsEntity = jobDetailsEntity.copy(runningSince = DateTime.now().getMillis).copy(modify_date = DateTime.now().getMillis) 
     complete { 
      createJobDetails(updatedJobDetailsEntity).map(_.asJson) 
      createJob(updatedJobEntity).map(_.asJson) 
     } 
    } 

としてルートを定義したアッカのHttp、で働いています複数回マテリアすることはできません私のJSONペイロードID小さなすなわち、数バイト、その作品正常に動作同じPOST呼び出し、とすぐにペイロードサイズが大きくなると、それはエラーがスロー周りに10〜20キロバイトすなわちとして:

Substream Source cannot be materialized more than once

答えて

1

https://github.com/akka/akka-http/issues/745#issuecomment-271571342を参照してください。要するに、エンティティを2回アンマーシャリングする必要がある場合は、まずtoStrictを使用してエンティティ全体がメモリにバッファされていることを確認する必要があります。そうでなければ、最初のアンマーシャルプロセスによって排水され、2番目のプロセスでは使用できません。

エンティティがakkaの内部バッファに収まるほど小さい場合、誤ってtoStrictを使用しないとうまくいかない場合、実際には排水は必要ありません。いくつかのディレクティブが暗黙toStrict動作を強制

+0

は ' – Freeman

0

注、entity(as[String])と同様のものと かかります。

アッカのドキュメントを参照してください。私は私の場合のように実体を作る方法Server-Side handling of streaming HTTP Entities

+0

がため言及リンクの上ご参照気軽に@Freeman toStrict'「どのように私は私の場合のように実体を作るために'toStrict'?" – gihanchanuka

関連する問題