我正在根据某些条件动态构建路线。例如,根据配置,from 路由可以是 quartz2 或文件组件。 路线的所有其他部分都是相同的。
文件组件路由
from(file://E:/Camel)
.setProperty("fileName", simple("${file:onlyname}"))
.process(camelprocessor)
.to(queue)
.log("Posted message to Queue");
Quartz2 组件路由
from(quartz2://schedulername?cron=0+0/5+12-18+?+*+MON)
.pollEnrich(file://E:/Camel)
.setProperty("fileName", simple("${file:onlyname}"))
.process(camelprocessor)
.to(queue)
.log("Posted message to Queue");
正如您在上面的 route 看到的,两条路线的最后四行是相同的。 目前,我们正在借助direct组件将路由的from部分(定时器或quartz2组件)连接到普通路由。
这是正确的方法吗?使用直接组件会不会有性能问题?
我们正在考虑的其他选择是:
- 在两条 route 复制路线的公共(public)部分。
- 使用基于内容的路由但不确定如何使用条件 来自组件本身。
我很感激关于上述的任何建议。
最佳答案
你可以按照你说的添加直接组件并从公共(public)路由调用。据我所知,我建议不要使用 pollenrich。
因为使用 pollenrich,您无法一次处理所有文件(即)pollenrich 一次可以处理 10 个实例。如果您需要处理超过 10 个文件,则无法处理。
而不是在路由中使用 quartz 和文件组件。您可以像这样将两者加起来作为单个端点,
<from uri="file://pathto//yourfile?scheduler=quartz2&antInclude=*.xml&scheduler.cron={{schedularName.Scheduler}}"/>
希望对你有帮助。
关于java - 基于特定条件的 Camel 条件路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001074/