0

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

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

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

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

Camel 自动向这些处理器指示它们可以启动的方式是什么?

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

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

这些报告生成器、BI 组件等等待此队列上的消息启动。

这个解决方案似乎很复杂。我是 ESB 和 Camel 的新手,所以我想会有一个 EIP/处理器来处理这种情况,但我似乎找不到它。骆驼向导将如何构建此解决方案?

4

1 回答 1

0

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

于 2012-11-15T02:34:34.137 回答