微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一种优雅的异步解决方案,用于从 Java 中的 Vertx 工作线程将文件从 S3 发送到客户端

如何解决一种优雅的异步解决方案,用于从 Java 中的 Vertx 工作线程将文件从 S3 发送到客户端

我有一个 Vertx 服务器,有一个垂直工作线程来异步处理 S3 操作的请求。我们需要一个解决方案,通过我们的服务器将文件从 S3 传输到客户端。 tsegismont 回答了先前的问题 Streaming S3 object to VertX Http Server Response,但该建议似乎会阻塞 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 中的 blocksHandler 方法。这不是异步调用。该线程可能在几秒钟内不会被释放,并且比之前的解决方案更糟糕。

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。