【发布时间】:2012-11-03 15:30:46
【问题描述】:
我有一个场景,我通过将大型日志文件摄取到基于 Camel 的 ESB 上来处理它。此总线上的第一站是处理器 - LogTransformer - 它从日志文件中逐一(实时)解析日志消息,并创建 XML sn-ps:
<log-record level="INFO" source="MyApp" .../>
这些<log-record/> XML sn-ps 中的每一个都被放入消息队列并被总线拾取。最终它在 MySQL 数据库中结束。
我有某些处理器,我想仅在日志文件完全处理后启动(所有日志记录都已转换为<log-record/> 并入队、由总线处理并存储到数据库)。诸如报告生成器、BI 组件等之类的东西。这些处理器在整个日志入队之前不应启动。
Camel 自动向这些处理器指示它们可以启动的方式是什么?
我能想到的最好办法是让我的LogTransformer 处理器(解析日志记录、将它们转换为<log-record> XML 并将它们排入队列的部分)创建一个 EOF 日志记录之后 它完成处理日志。像<log-record eof="true"> 这样的东西。然后它像往常一样将此消息排入队列。
当总线中的最后一个处理器(将<log-record> 持久化到 MySQL)遇到 EOF 日志记录时,它不会将其持久化,而是将其排入队列。
这些报告生成器、BI 组件等等待此队列中的消息启动。
这个解决方案看起来很复杂。我是 ESB 和 Camel 的新手,所以我想会有一个 EIP/处理器来处理这种情况,但我似乎找不到它。 Camel Wizard 如何构建此解决方案?
【问题讨论】:
标签: java integration apache-camel esb