使用Alpakka S3连接器的多个下载请求

时间:2019-12-10 14:24:58

标签: scala amazon-s3 akka akka-stream alpakka

我正在尝试使用Alpakka S3 connector执行以下操作:

  • 从AWS S3下载许多文件
  • 通过Alpakka Zip Archive Flow流式传输下载的文件
  • 将Zip流上传回S3 Sink

我使用的代码是这样的:

val s3Sink: Sink[ByteString, Future[MultipartUploadResult]] = S3.multipartUpload("my-s3-bucket", "archive.zip")

val sourceList = (1 to 10).map(i => S3.download("my-s3-bucket", s"random$i.png").map {
    case Some((s, m)) => (ArchiveMetadata(s"${UUID.randomUUID()}.png"), s)
})
val source = Source.combine(sourceList.head, sourceList.tail.head, sourceList.tail.tail: _*)(Merge(_))

source
    .via(Archive.zip())
    .to(s3Sink)
    .run()

但是,这将导致以下错误:

Response entity was not subscribed after 1 second. Make sure to read the response entity body or call `discardBytes()` on it.

我怀疑这是由于以下事实:S3连接器expects every download response to be consumed使用的基础Akka Http在移至下一个之前,但是我不能以合理的方式处理此问题而没有引入等待/延误。 我尝试将队列与bufferSize = 1一起使用,但这也不起作用。

我对Akka和Akka Streams还是很陌生。

0 个答案:

没有答案