尝试一种非常简单的骆驼路线:
from("aws-s3://javatutorial1232boomiau?amazonS3Client=#s3client&deleteAfterRead=true&fileName=My2.jsp").process(Empty2).log(LoggingLevel.INFO, "Replay Message Sent to file:s3out ${in.header.CamelAwsS3Key}")
.to("stream:out");
我正在使用verion 2.20.2(截至今日)。该文件未从存储桶中删除。我做了一些研究,从它的外观来看,传递给processCommit方法的交换缺少任何头文件。它正在寻找的标题是存储桶名称和密钥
String bucketName = exchange.getIn().getHeader(S3Constants.BUCKET_NAME, String.class);
String key = exchange.getIn().getHeader(S3Constants.KEY, String.class);
我还尝试过(“file://Users/user/out.txt”)文件也没有被删除,标题看起来是文件组件的标题。
编辑:
我注意到如果删除.processor(Empty2),则会从存储桶中删除该文件。处理器不做任何工作:
@Override
public void process(Exchange exchange) throws Exception {
Object body = exchange.getIn().getBody();
System.out.println("1: "+body);
Object body2 = exchange.getOut().getBody();
System.out.println("2: "+body2);
}
那么为什么没有它而不是处理器呢?如果不能使用处理器,我该如何处理消息?
答案 0 :(得分:1)
正如Claus指出的那样,使用exchange.getOut()在交换机上创建传出(空)消息体。没有标题被复制到交易所,因此它们都丢失了。当涉及到processCommit时,桶名和密钥的标题已丢失。
因此要么不访问getOut(),要么将所有标题从In复制到Out。