【发布时间】:2019-09-12 09:26:04
【问题描述】:
我正在使用 Apache Camel 编写一个演示程序。从 Spring Boot 调度程序调用 Out Camel 路由,它将文件从源目录 C:\CamelDemo\inputFolder 传输到目标目录 C:\CamelDemo\outputFolder
Spring Boot 调度器如下
@Component
public class Scheduler {
@Autowired
private ProducerTemplate producerTemplate;
@Scheduled(cron = "#{@getCronValue}")
public void scheduleJob() {
System.out.println("Scheduler executing");
String inputEndpoint = "file:C:\\CamelDemo\\inputFolder?noop=true&sendEmptyMessageWhenIdle=true";
String outputEndpoint = "file:C:\\CamelDemo\\outputFolder?autoCreate=false";
Map<String, Object> headerMap = new HashMap<String, Object>();
headerMap.put("inputEndpoint", inputEndpoint);
headerMap.put("outputEndpoint", outputEndpoint);
producerTemplate.sendBodyAndHeaders("direct:transferFile", null, headerMap);
System.out.println("Scheduler complete");
}
}
Apache Camel 路由如下
@Component
public class FileTransferRoute extends RouteBuilder {
@Override
public void configure() {
errorHandler(defaultErrorHandler()
.maximumRedeliveries(3)
.redeliverDelay(1000)
.retryAttemptedLogLevel(LoggingLevel.WARN));
from("direct:transferFile")
.log("Route reached")
.log("Input Endpoint: ${in.headers.inputEndpoint}")
.log("Output Endpoint: ${in.headers.outputEndpoint}")
.pollEnrich().simple("${in.headers.inputEndpoint}")
.recipientList(header("outputEndpoint"));
//.to("file:C:\\CamelDemo\\outputFolder?autoCreate=false")
}
}
当我注释掉 recipientList() 的行并取消注释 to() 时,即在 to() 中添加静态端点,流程正在运行。但是当我评论 to() 并取消评论接收者列表() 时,它不起作用。请帮助如何将消息路由到动态端点(outputEndpoint)?
【问题讨论】:
-
当我在 Exchange 的属性中设置 outputEndpoint 值并在接收者列表()中获取 exchangeProperty 时,它正在工作。