我有一个场景,我通过将大型日志文件摄取到基于 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/处理器来处理这种情况,但我似乎找不到它。骆驼向导将如何构建此解决方案?