java - 一种优雅的异步解决方案,用于从 Java 中的 Vertx worker verticle 将文件从 S3 发送到客户端

标签 java amazon-s3 vert.x file-transfer

我有一个 Vertx 服务器和一个 worker vertical 来异步处理 S3 操作的请求。我们需要一个解决方案来通过我们的服务器将文件从 S3 传输到客户端。前一个问题Streaming S3 object to VertX Http Server Response由 tsegismont 回答,但该建议似乎会阻止 Vertx 线程。文件传输属于一个单独的垂直领域。由于 RoutingContext 未按照 How can I send RoutingContext object from routing vertical to some other vertical using vertx.eventBus().send() method? 的建议跨总线发送,因此此推荐的解决方案在垂直工作人员中不起作用。 .请注意,这里推荐的创建特殊编解码器的解决方案似乎行不通,因为垂直工作线程需要 RoutingContext。

另一种解决方案是从 S3 获取对象。将其保存到文件。然后使用 WebClient API 中的 fileSend 方法发送给客户端。这...不是一个优雅的解决方案。

第三种解决方案是放弃 WorkerVertical 并使用 MainVertical 中的 blockingHandler 方法。这不是异步调用。该线程可能在几秒钟内不会被释放,并且比以前的解决方案更糟糕。

最佳答案

我不知道它是否适合您,但您可以使用预签名 url - https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

我大部分时间所做的是使用 vertx 服务器处理协调并生成预签名的 url 以从 s3 获取/上传文件。

客户端获得预签名的 URL,可以直接下载/上传到 s3,同时通过后端保护实际凭证。

预签名 URL 的生命周期有限,您无需处理文件流/内存不足异常等即可获得 AWS 的所有可扩展性。

关于java - 一种优雅的异步解决方案,用于从 Java 中的 Vertx worker verticle 将文件从 S3 发送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65757015/

相关文章:

ssl - 在 Vert.x 上将 SSL 协议(protocol)限制为 TLS 1.2

具有灵活回退值的 java.time DateTimeFormatter 解析

java - 如何仅使用 JDK 注入(inject)属性文件?

java - 谁能解释一下Java运算符<<=?

javascript - 无法将文件复制到另一个存储桶,显示错误(NoSuchKey : The specified key does not exist.)

java - 基于 Vert.x 的应用程序在 docker 容器上崩溃

java - 显示 map 框的导航 View ,方向单位为公里/分钟而不是英里/英尺

python - AWS sagemaker 错误 - AttributeError : 'NoneType' object has no attribute 'startswith'

amazon-s3 - 使用 boto3 创建带有自定义 header 的 s3 预签名 url (put)

java - Vertx Kafka 通过显式轮询自动提交