当前位置: 首页 > 知识库问答 >
问题:

Apache Camel以嵌套拆分方式加入所有交换

阎志义
2023-03-14

我对Apache Camel相当陌生,有几个问题。我希望我的路线做到以下几点:

  • 加载列表中加载列表
  • 拆分两次,这样我就可以处理内部列表中的每个项目
  • 过滤掉一些我不需要的东西
  • 从内部分裂加入所有剩余的交换
  • 然后最终再次加入(回到一个交易所)

我的路线如下所示:

from("direct:myRoute")
    .process(new LoadSomeThingsProcessor())
    .split(body())
    .streaming()
    .process(new SomeProcessor())
    .split(body())
    .streaming()
    .filter(new SomeFilter())
    .aggregate(header("myHeader", new MyAggregationStrategy())
    .completionPredicate(new MyCompletionPredicate())
    // more processors
    // aggregate again (should just be one exchange after this point
    // more processors
    .to("direct:someOtherRoute");

MyCompletionPrediate匹配method只是:

return exchange.getIn().getProperty("CamelSplitComplete", Boolean.class);

我想确保在我继续之前,每个拆分中的所有交换都聚合在一起。

我的问题是:-CamelSplitCompl头从来都不是真的。什么会导致这种情况?-试图在嵌套拆分中聚合会导致任何问题吗?-如果最后一个交换(应该有CamelSplitCompl=true的交换被过滤掉会发生什么?我怎么知道我已经将所有的交换聚合在一起了?-这是解决这个问题的正确方法吗?如果没有,我还应该考虑什么?

仅供参考,我的聚合策略只是将新交易所的主体添加到旧交易所的主体中。

先谢过了。

共有1个答案

宗安宁
2023-03-14

请参阅合成消息处理器EIP:https://camel.apache.org/components/latest/eips/composed-message-processor.html

并且有一个标题为“仅拆分器”的示例,它允许执行分叉/连接样式。您仍然可以在拆分器中使用过滤器来过滤特定项目等。

尽量不要把它弄得太复杂,有2倍的分割和各种各样的东西——保持它简单一点,然后它更容易使用,测试和工作。

 类似资料:
  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下

  • 我想用Java中所有可能的方法将一个列表拆分为给定数量的n个子列表。 例如,其中n=3将包括以下列表(但不是一个完整的解决方案-完成将需要更多的空间): 等 我适应了另一个类似的问题的解决方案(以所有可能的方式将列表分割成两个子列表),但它只适用于创建2个子列表的列表,我正在努力掌握如何实现灵活而不是硬编码的子列表数量。 这是我的密码: 我需要创建n个数的EGroup对象添加到,而不是硬编码的2,

  • 例如,我有一个可变大小的列表 我想用各种可能的方法把这个列表分成两部分: 我很确定这不是一个未知的问题,可能有一个算法,但是我找不到。此外,这不应使用任何外部库,而应使用简单的语言功能(循环、条件、方法/函数、变量等)在大多数语言中都可以找到。 我用Python写了一个hackish解决方案: 但是,它使用了库功能,总体上不是很好看。

  • 问题内容: 我有一个格式为String的String ,其中包含任意数量的元素。我想将它拆分的逗号分隔的坐标,也就是检索,和。 我可以用Java正则表达式来做吗?我是一个完整的菜鸟,但希望Java regex足够强大。如果不是,您是否可以建议替代方法? 问题答案: 您可以为此使用。 在 正回顾后发意味着它必须在前面加。在 正向前查找意味着它必须由suceeded 。该意味着它必须在劈裂后的任何空间

  • 嗨,我想在javascript中以特定的方式拆分一个字符串,比如字符串是C:/用户/我/AppData/弹性/弹性1.6。我知道我可以分裂它使用分裂()方法,并使用pop()和Shift()得到第一个和最后一个分裂的字符串,但我想分裂它喜欢,除了最后一个字符串。所以答案应该像“C:/用户/我/AppData/弹性” 我是这样做的,, 我像这样出去了, 但我想要这样,

  • 我对neo4j很陌生,我想创建一个应用程序。 在远程服务器模式下,似乎只有RESTAPI可以用于连接neo4j。所以我决定使用嵌入式数据库,因为我想使用neo4j提供的JAVA API。 本教程中有一个创建连接的示例: 似乎每次我运行这段代码时,它都会创建一个新的数据库实例,所有现有的数据都会被覆盖。 但是数据需要保存,我不会在代码中将所有数据导入数据库... 如何解决这个问题?我需要的是连接到数