Apache camel Apache Camel消费者模板无法复制文件,无法复制一个文件两次
嗨,我正在使用ApacheCamel 2.15.2。我有一个消费者模板,因此我可以复制具有动态文件名的文件:Apache camel Apache Camel消费者模板无法复制文件,无法复制一个文件两次,apache-camel,Apache Camel,嗨,我正在使用ApacheCamel 2.15.2。我有一个消费者模板,因此我可以复制具有动态文件名的文件: if (fileInfo != null) { filename = fileInfo.getFileName(); String camelUri = "file://" + fileInfo.getCopyFilePath() + "/?fileName=RAW(" + filename + ")
if (fileInfo != null) {
filename = fileInfo.getFileName();
String camelUri = "file://" + fileInfo.getCopyFilePath() + "/?fileName=RAW("
+ filename + ")&noop=false&idempotent=false&readLock=changed";
System.out.println("Camel uri: " + camelUri);
logger.info("Camel uri: " + camelUri);
Exchange ex = consumerTemplate.receive(camelUri);
....
如您所见,我显式地设置了noop和幂等元,以实现多次复制同一文件。但事实并非如此。它挂起receive方法,以便后续尝试复制同名文件。只有我们重新启动应用程序,它才能复制它。如有任何建议,将不胜感激。它可能与此类似,但我无法访问该解决方案。提前谢谢
当我通过Camel代码进行调试时,它似乎正在调用EventDrivenPollingConsumer的receive方法,并在调用queue.take()时挂起(第110行)。而且,即使在该变量内部,ArrayBlockingQueue中的“count”变量也为零:
while (count == 0)
notEmpty.await();
加上这个,以防万一它能帮助任何有线索的人 好的,如果我调用“consumerTemplate.doneUoW(ex)”,它会复制多次。但是,同时它正在删除(实际上移动到.camel文件夹)源文件,我不想这样做!然后,必须设置noop=true:
if (fileInfo != null) {
filename = fileInfo.getFileName();
String camelUri = "file://" + fileInfo.getCopyFilePath() + "/?fileName=RAW("
+ filename + ")&noop=true&idempotent=false&readLock=none";
System.out.println("Camel uri: " + camelUri);
logger.info("Camel uri: " + camelUri);
Exchange ex = consumerTemplate.receive(camelUri);
// consumerTemplate.r
logger.info("File received: " + fileInfo.getFileName());
exchange.getOut().setBody(ex.getIn().getBody());
consumerTemplate.doneUoW(ex);
}
现在,它如预期的那样工作