Akka http -ERROR:如果有效负载大小增加,则子流源不能实现一次以上

Fre*_*man 1 rest scala akka akka-http

我正在使用Akka Http,在这里我将路线定义为

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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这里,我试图在同一POST调用中解组两个实体,当我的json Payload id较小(即几个字节)然后正常工作时,该实体工作,一旦有效负载大小增加,即10-20 kb左右,它将引发错误:

Substream Source cannot be materialized more than once

Mic*_*cki 5

请参阅https://github.com/akka/akka-http/issues/745#issuecomment-271571342

简而言之,如果您需要将实体解组两次,则应首先使用toStrict来确保整个实体都已在内存中缓冲,否则第一个解组过程将耗尽整个实体,而第二个则无法使用。

只是偶然地,如果实体足够小以至于它可以放入akka的内部缓冲区中,它就会在没有toStrict的情况下起作用,那么实际上就没有消耗。

  • 如何创建一个实体,如我的例子“toStrict” (2认同)