如何解决一种优雅的异步解决方案,用于从 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 举报,一经查实,本站将立刻删除。