Camel EIP模式用于表示EOF?

时间:2012-11-15 02:19:15

标签: java integration apache-camel esb

我有一个场景,我通过将其摄取到基于Camel的ESB来处理大型日志文件。该总线的第一站是一个处理器 - LogTransformer - 从日志文件中逐个解析日志消息(实时),并创建XML片段:

<log-record level="INFO" source="MyApp" .../>

这些<log-record/> XML片段中的每一个都被放入消息队列并被总线接收。最终它会在MySQL数据库中出现。

我有一些处理器,我想在完全处理日志文件之后启动 (所有日志记录都已转换为<log-record/>并排队,由总线处理,以及存储到DB)。报告生成器,BI组件等等。在整个日志入队之前,这些处理器不应该开始。

Camel如何自动向这些处理器表明他们可以启动?

我能想到的最好的方法是让我的LogTransformer处理器(解析日志记录的部分,将它们转换为<log-record> XML,然后将它们排队)创建一个EOF日志记录之后,它完成了对日志的处理。像<log-record eof="true">这样的东西。然后它会像平常一样将此消息排入队列。

当总线中的最后一个处理器(持续<log-record>到MySQL)遇到EOF日志记录而不是持久化时,它会将其排入队列。

这些报告生成器,BI组件等等待此队列上的消息开始。

这个解决方案似乎很复杂。我是ESB和Camel的新手,所以我认为会有一个处理这种情况的EIP /处理器,但我似乎无法找到它。骆驼巫师如何构建这个解决方案?

1 个答案:

答案 0 :(得分:0)

查看Splitter(http://camel.apache.org/splitter.html)和Aggregator(http://camel.apache.org/aggregator2.html)。聚合器可以使用completionSize来确定它具有继续处理所需的所有部分。