我正在尝试创建一个具有“单向”行为阻止的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同步完成?
答案 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();