5

我有一个问题,不知道如何使用骆驼解决它。我在骆驼文档中搜索了相关的 EIP,但没有结果。

现在我有简单的路线:

<route id="routeId">
    <from uri="Source1"/>
    <from uri="Source2"/>
    <to   uri="Destination"/>
</route>

两个源都将 JMS 消息发送到 Destination,并且在 Source 完成其工作的某个时间点,它会发送特定的结束消息,并带有一些标志。我需要做的是收集或计算这些结束消息,并在我从两个来源收到结束消息时将单个结束消息发送到目的地。只有当我收到两条结束消息(想象它只是带有一些标头标志的简单消息)时,我才应该将单个消息发送到目的地。

抱歉,如果问题解释不够清楚。

提前致谢。

4

2 回答 2

8

Camel聚合器过滤器模式可用于这种情况......

  • 使用过滤器检测“结束”消息并通过聚合器路由它们
  • 使用自定义聚合策略来构建带有计数的单端消息
  • 使用自定义完成谓词触发完成消息

像这样的东西......

from("source1").to("direct:aggregateRoute"); 
from("source2").to("direct:aggregateRoute"); 
from("direct:aggregateRoute")
    .filter(header("isEndMessage").isEqualTo("true"))
        .aggregate(constant(true), new MyAggregationStrategy())
        .completionPredicate(new MyCompletionStrategy())
    .to("destination");
于 2014-08-14T15:17:46.767 回答
5

如果您只想从多个输入中进行选择并且不想对传入消息执行任何修改,您可以执行以下操作:

from("URI1", "URI2", "URI3").to("DestinationUri");

有关更多信息,请查看此链接,它对我有帮助

于 2019-01-31T13:17:51.550 回答