Aws集成弹簧:S3MessageHandler“单向”

时间:2016-05-27 14:35:18

标签: spring amazon-s3 spring-integration

我正在尝试创建一个具有“单向”行为阻止的S3MessageHandler。我在java docs中看到了上面这个类的行;

 * The {@link S3ProgressListener} can be supplied to track the transfer progress.
 * Also the listener can be populated into the returned {@link Transfer} afterwards in the downstream flow.

我无法完成上述任务。

我使用使用outputchannel启用的“请求 - 回复”行为正确创建了异步版本。但是无法创建阻止版本。

  S3MessageHandler s3MessageHandler = new S3MessageHandler(this.amazonS3, bucket, true);
    s3MessageHandler.setCommandExpression(parser.parseExpression("headers.s3Command"));
    s3MessageHandler.setSendTimeout(2000);
    s3MessageHandler.setKeyExpression(parser.parseExpression("headers.key"));
    s3MessageHandler.setProgressListener(this.assessmentProgressListener);
    s3MessageHandler.setOutputChannel(outputChannel);

上述代码将在传输完成后输出到outputChannel,但这是完成异步。如何创建上述阻止版本。我试图编码它将阻止直到s3同步完成?

1 个答案:

答案 0 :(得分:1)

您应该分享有关此事的更多信息。

例如,您尝试了什么以及结果如何。

我们有这样的测试配置:

    @Bean
    @ServiceActivator(inputChannel = "s3SendChannel")
    public MessageHandler s3MessageHandler() {
        S3MessageHandler s3MessageHandler = new S3MessageHandler(amazonS3(), "myBucket");
        s3MessageHandler.setCommandExpression(PARSER.parseExpression("headers.s3Command"));
        Expression keyExpression =
                PARSER.parseExpression("payload instanceof T(java.io.File) ? payload.name : headers.key");
        s3MessageHandler.setKeyExpression(keyExpression);
        s3MessageHandler.setObjectAclExpression(new ValueExpression<>(CannedAccessControlList.PublicReadWrite));
        s3MessageHandler.setUploadMetadataProvider((metadata, message) -> {
            if (message.getPayload() instanceof InputStream) {
                metadata.setContentLength(1);
                metadata.setContentType(MediaType.APPLICATION_JSON_VALUE);
                metadata.setContentDisposition("test.json");
            }
        });
        s3MessageHandler.setProgressListener(s3ProgressListener());
        return s3MessageHandler;
    }

有一项测试证明我们被阻止等待:

AmazonClientException amazonClientException = transfer.waitForException();