我是 activeMQ / Camel 的新手,所以请耐心等待。
在骆驼路线中,我使用拆分器生成多个子路线。此路由中的每一个都将使用一些外部 API 来执行某些工作,并轮询直到作业完成。我有那么远。
现在,我需要触发最后一个操作来收集所有这些路由的结果。我将如何以骆驼/AMQ的方式做到这一点?
我正在考虑在每个子路由中将一条消息发布到 AMQ 队列,但我还没有找到一种方法来等待该队列中收到 N 条消息,然后再在我的最终 Camel 路由中使用它。
谢谢。
如果您需要从拆分器子路由收集所有结果,并在所有子路由完成后对这些结果执行一些操作,则可以在拆分器上使用聚合策略 (https://camel.apache.org/manual/latest/aggregate-eip.html)。
通过使用聚合策略,拆分后的 Exchange 将包含所有子路由的结果。
使用 Java DSL 的示例:
.split(expression, new GroupedExchangeAggregationStrategy())
...
.end()
GroupedExchangeAggregationStrategy将所有拆分的交易所聚合到一个列表中。如果需要,您可以使用另一个预定义的聚合策略,也可以通过扩展 org.apache.camel.processor.aggregate.AggregationStrategy 来创建自定义策略。