使用生成器模板调用camel路由

hc2pp10m  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(142)

我的用例是基于我需要从不同的源系统获取或移动文件到目标系统的其余控制器输入。
路线:-

@Component
public class MoveFile extends RouteBuilder {
@override
public void configure() throws Exception {

from("file:tmp/${header.inPath}")
    .to("file:/tmp${header.outPath}?fileName=${header.fileName}")
    .setBody().constant("File - ${header.inPath}/${header.fileName} Moved Succesfully")

}
}

我的rest控制器将沿着getMapping传递jobName,以调用这个特定的路径inPath、outPath和FileNames

@Resource(name=RouteProperties)
private Prosperties props;

@GetMapping("/runJob/{jobToInvoke}")
public String runJob (@PathVariable final String jobToInvoke){
String inPath=props.getProperty("inPath"+jobToInvoke)
String outPath=props.getProperty("outPath"+jobToInvoke)
String fileName=props.getProperty("fileName"+jobToInvoke)

String jobStatus = ProducerTemplate.withHeader("inPath",inPath)
                   .   
                   .
                   .to(??)
                   .request(String.class)
}

我需要帮助使用生产者模板传递属性使用到?我尝试了一些搜索上的谷歌,但有一个例子可在youtube(link),但在该视频调用URI,(直接:sendMessage)和从在路由也有。如何处理在这种情况下?提前感谢

guykilcj

guykilcj1#

direct:端点开始的路由可以从Java代码中以编程方式调用。在路由中,pollEnrich组件调用使用者端点来读取文件,并将exchange消息正文替换为文件内容。

from("direct:start")
    .pollEnrich().simple("file:/tmp?fileName=${header.inPath}")
    .toD("file:/tmp?fileName=${header.outPath}")
    .setBody().simple("File - ${header.inPath} Moved Successfully");

要从Java代码调用路由,请执行以下操作:

String jobStatus = producerTemplate.withHeader("inPath", inPath)
    .withHeader("outPath", outPath)
    .to("direct:start")
    .request(String.class);
j5fpnvbx

j5fpnvbx2#

我不知道from中的这些动态文件URI是否有效,但至少Camel File documentation状态
另外,起始目录不能包含带有${ }占位符的动态表达式。再次使用fileName选项指定文件名的动态部分。
所以医生们建议

from("file:tmp/${header.inPath}")

进入

from("file:tmp?fileName=${header.inPath}")

fileName选项可以是相对路径(而不仅仅是文件名)。
如果更改对您有效,您的问题就变得过时了,因为路由URI不再是动态的。

.withHeader("inPath",inPath)
.to("file:tmp")

相关问题