我有一个场景,我通过将其摄取到基于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 /处理器,但我似乎无法找到它。骆驼巫师如何构建这个解决方案?
答案 0 :(得分:0)
查看Splitter(http://camel.apache.org/splitter.html)和Aggregator(http://camel.apache.org/aggregator2.html)。聚合器可以使用completionSize来确定它具有继续处理所需的所有部分。