Scala 使用Alpakka S3连接器的多个下载请求
我正在尝试使用来执行以下操作:Scala 使用Alpakka S3连接器的多个下载请求,scala,amazon-s3,akka,akka-stream,alpakka,Scala,Amazon S3,Akka,Akka Stream,Alpakka,我正在尝试使用来执行以下操作: 从AWS S3下载大量文件 通过Alpakka流式传输下载的文件 将压缩流上载回S3接收器 我使用的代码如下所示: val s3Sink: Sink[ByteString, Future[MultipartUploadResult]] = S3.multipartUpload("my-s3-bucket", "archive.zip") val sourceList = (1 to 10).map(i => S3.download("my-s3-buc
- 从AWS S3下载大量文件
- 通过Alpakka流式传输下载的文件
- 将压缩流上载回S3接收器
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连接器在移动到下一个连接器之前使用了底层Akka Http,但我无法在不引入等待/延迟的情况下以合理的方式处理此问题。
我尝试使用bufferSize=1
的队列,但也不起作用
我对Akka和Akka Streams相当陌生。我们正在研究这个问题。我会提供一个明确的答案。这可能是由于元素的内部缓冲以及有限的连接池大小。您在后台使用同一个池进行上传和下载,因此在发生争用的情况下,下载可能会在您有能力再次上传之前开始。最终,我使用了来自普通AWS SDK GetObjectRequest的InputStream,直到我找到一种使用Alpakka/Akka Http的方法