Rest 骆驼分割并行处理聚合消息

Rest 骆驼分割并行处理聚合消息,rest,concurrency,split,parallel-processing,apache-camel,Rest,Concurrency,Split,Parallel Processing,Apache Camel,可能看起来像一个小问题,但不幸的是无法使其工作 这是密码 from("direct:START") .process( (ex) -> { List<Integer> pages = IntStream.range(1,5).boxed().collect(Collectors.toList()); ex.getOut().setBody( pages ); }) .split(body()) .parallelProcessing() .to("http://s

可能看起来像一个小问题,但不幸的是无法使其工作

这是密码

from("direct:START")
.process( (ex) -> {
   List<Integer> pages = IntStream.range(1,5).boxed().collect(Collectors.toList());
   ex.getOut().setBody( pages );
 })
.split(body())
.parallelProcessing()
.to("http://someurl?page=${body}");
 --> Get the collective body here
from(“直接:开始”)
.过程((ex)->{
List pages=IntStream.range(1,5).boxed().collect(Collectors.toList());
例如getOut().setBody(页);
})
.split(body())
.parallelProcessing()
.至(”http://someurl?page=${body}”);
-->把集体召集到这里来
如何得到这份工作

您可以与
completionSize
表达式一起使用来聚合拆分的消息

.split(body()).parallelProcessing().to("log:splitted_body_is_here")
.aggregate(constant(true), AggregationStrategies.groupedBody())
    .completionSize(exchangeProperty(Exchange.SPLIT_SIZE))
.to("log:aggregated_body_is_here")
如果您使用的是旧版本的camel(2.20.x)AggregationStrategies.groupedBody()将不可用。您可以使用其他方法。我使用了一个简单的自定义方法来执行聚合

代码更改为

.split(body()).parallelProcessing().to("log:splitted_body_is_here")
.aggregate(constant(true), (in,out) ->{
                if( in == null ){
                    return out;
                }
                else{
                    String body = in.getIn().getBody(String.class);
                    body = body + "," + out.getIn().getBody( String.class );
                    in.getOut().setBody( body );
                    return in;
                }
            })
    .completionSize(exchangeProperty(Exchange.SPLIT_SIZE))
.to("log:aggregated_body_is_here")
上面的代码假设主体是字符串/JSON,并用逗号将其追加

看起来,您希望在
中使用动态url调用端点。它不受支持,请改用
toD

您可以与
completionSize
表达式一起使用来聚合拆分的消息

.split(body()).parallelProcessing().to("log:splitted_body_is_here")
.aggregate(constant(true), AggregationStrategies.groupedBody())
    .completionSize(exchangeProperty(Exchange.SPLIT_SIZE))
.to("log:aggregated_body_is_here")
如果您使用的是旧版本的camel(2.20.x)AggregationStrategies.groupedBody()将不可用。您可以使用其他方法。我使用了一个简单的自定义方法来执行聚合

代码更改为

.split(body()).parallelProcessing().to("log:splitted_body_is_here")
.aggregate(constant(true), (in,out) ->{
                if( in == null ){
                    return out;
                }
                else{
                    String body = in.getIn().getBody(String.class);
                    body = body + "," + out.getIn().getBody( String.class );
                    in.getOut().setBody( body );
                    return in;
                }
            })
    .completionSize(exchangeProperty(Exchange.SPLIT_SIZE))
.to("log:aggregated_body_is_here")
上面的代码假设主体是字符串/JSON,并用逗号将其追加


看起来,您希望在
中使用动态url调用端点。它不受支持,请改用
toD

您需要提供更多信息,以便人们能够帮助您:1)您希望代码做什么?2) 当前代码的作用是什么?@quant\u dev较小的问题并不意味着它几乎没有信息。这个问题非常精确,有人已经解决了。这个问题暂时搁置。行数并不决定质量。这个问题实际上很清楚,而且直截了当,没有不必要的故事。不管怎样,我得到了我的答案。你需要提供更多的信息,以便让人们帮助你:1)你希望代码做什么?2) 当前代码的作用是什么?@quant\u dev较小的问题并不意味着它几乎没有信息。这个问题非常精确,有人已经解决了。这个问题暂时搁置。行数并不决定质量。这个问题实际上很清楚,而且直截了当,没有不必要的故事。不管怎样,我都能得到答案。看看布雷特的大脑袋:)马上!但是我没有看到名为AggregationStrategies.groupedBody()的Class.method。使用工作代码编辑。感谢您的编辑,但未删除
AggregationStrategies.groupedBody()
。它存在于。可能您指的是旧版本,它的名称为
AggregationStrategies.batch()
(在中重命名),但功能相同。或者在哪个版本中你错过了它?天哪!。我用的是旧版本。2.20.x:(马上升级。谢谢你的指点。编辑了答案,看看布雷特的大脑袋:)马上!但是我没有看到名为AggregationStrategies.groupedBody()的Class.method。使用工作代码编辑。感谢您的编辑,但未删除
AggregationStrategies.groupedBody()
。它存在于。可能您指的是旧版本,它的名称为
AggregationStrategies.batch()
(在中重命名),但功能相同。或者在哪个版本中你错过了它?天哪!。我用的是旧版本。2.20.x:(将立即升级。感谢您的指针。还编辑了答案