S3 传输管理器需要大量时间来上传

S3 transfer manager takes huge time to upload

我正在通过传输管理器将我的应用程序对象上传到 s3。它工作正常,但在极少数情况下,300 KB 的对象大小需要 15 分钟。我只是在探索引入重试逻辑,这样我就可以在 30 秒后中止当前上传并重新提交。下面是我的代码

private static UploadResult put(
            final AmazonS3 amazonS3,
            final Supplier<PutObjectRequest> requestSupplier) throws Exception {
        TransferManager tx = TransferManagerBuilder
                .standard()
                .withS3Client(amazonS3)
                .build();
        try {
            Upload myUpload = tx.upload(requestSupplier.get());

            return myUpload.waitForUploadResult();
        } finally {
            tx.shutdownNow(false);
        }
    }

我们能否有一些东西可以让我在 30 秒后暂停此上传请求,以便我可以重试。 waitForUploadResult 方法是一个阻塞调用,因此只能等待它完成才能对其进行任何操作。

提前致谢!

我找不到使上传请求超时的方法,所以我在执行程序中提交了它,因此等待部分在单独的线程中运行。下面是我的代码

private static UploadResult put(
            final AmazonS3 amazonS3,
            final Supplier<PutObjectRequest> requestSupplier) throws Exception {
        TransferManager tx = TransferManagerBuilder
                .standard()
                .withS3Client(amazonS3)
                .build();
        ExecutorService ex = Executors.newSingleThreadExecutor();
        Upload myUpload = tx.upload(requestSupplier.get());
        try {
            Future<UploadResult> f = ex.submit(() -> myUpload.waitForUploadResult());
            return f.get(2, TimeUnit.MINUTES);
        } catch (TimeoutException te) {
            myUpload.abort();
            throw new RuntimeException("S3 save operation timeout after 2 minutes. Aborted.", te);
        } finally {
            ex.shutdownNow();
            tx.shutdownNow(false);
        }
    }