【问题标题】:AWS Java SDK - using ProgressListener with TransferManagerAWS Java SDK - 将 ProgressListener 与 TransferManager 结合使用
【发布时间】:2019-04-10 20:21:52
【问题描述】:

我正在查看 AWS SDK 文档中为 TransferManager 提供的使用示例,尤其是以下代码:

TransferManager tx = new TransferManager(
               credentialProviderChain.getCredentials());
Upload myUpload = tx.upload(myBucket, myFile.getName(), myFile);
 // Transfers also allow you to set a <code>ProgressListener</code> to receive
// asynchronous notifications about your transfer's progress.
myUpload.addProgressListener(myProgressListener);

我想知道我们这里是否没有竞争条件的情况。 AFAIU TransferManager 异步工作,它可能在 Upload 对象创建后立即开始上传文件,甚至在我们添加侦听器之前,所以如果我们使用文档中提供的 sn-p,似乎有可能我们不会收到所有通知。我已经简要地查看了addProgressListener,我没有看到过去的事件会在附加新的侦听器时重播。我错了吗?我错过了什么吗?

【问题讨论】:

    标签: java amazon-web-services amazon-s3 aws-sdk aws-java-sdk


    【解决方案1】:

    如果您需要获取所有事件,我想这可以使用不同的upload 方法来实现,该方法将ProgressListener 作为参数。当然,使用这种方法需要将你的bucketname、key和file封装到PutObjectRequest的实例中。

    【讨论】:

    • 所以我说得对吗?我已经看到你链接的方法,我打算使用它。我只是想确认我的推理或找出我做错了什么。
    • 我假设在很多情况下,人们主要对知道他们的传输何时成功完成感兴趣,而对确保他们获得 ProgressListener 支持的所有事件不太感兴趣。我只是将其视为支持不同用例的重载方法。
    • 换句话说,关于不一定要获得所有事件,您可能是正确的,但作者认为在大多数情况下这并不重要。
    • 哦,这最终是我的目标 - 以非阻塞方式学习上传完成 - 失败或成功。认为进度监听器是要走的路。
    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多