Apache camel 生成多条消息

Apache camel 生成多条消息,apache-camel,Apache Camel,我有一个场景,其中一条消息可以生成多条独立于原始消息处理的消息 我尝试过拆分器EIP,但它似乎有一个默认聚合策略(我似乎无法关闭) 我是否可以实现这一路线: from("direct:in").to("bean:multipleMsgGenerator").to("direct:out") 其中multipleMsgGenerator可以向“direct:out”发送n条独立消息 谢谢 默认情况下,拆分器返回原始消息(驼峰版本>=2.3)。看见也就是说,您可以对Spit块内的单个拆分消息执行任

我有一个场景,其中一条消息可以生成多条独立于原始消息处理的消息

我尝试过拆分器EIP,但它似乎有一个默认聚合策略(我似乎无法关闭)

我是否可以实现这一路线:

from("direct:in").to("bean:multipleMsgGenerator").to("direct:out")
其中multipleMsgGenerator可以向“direct:out”发送n条独立消息


谢谢

默认情况下,拆分器返回原始消息(驼峰版本>=2.3)。看见也就是说,您可以对Spit块内的单个拆分消息执行任何您想执行的操作

例如,如果邮件正文是一个列表,则可以执行以下操作:

from ("direct:in)
  .split(body())
    .to("direct:processIndividualMsg")
  .end()
  .to("direct:doSomethingWithTheOriginalMsg");

对于任何发现这个问题的人,我们都找到了适合我们的解决方案。
我们收到一条需要转发多条消息的消息。这可以通过以下方式实现: 1.创建列表并将其设置到exchange主体中的自定义处理器
2.自定义处理器后的拆分().body()
3.驼峰分割逻辑获取列表并注意到它是一个项目列表,因此对其进行迭代以获得要转发的消息
(这是通过org.apache.Camel.processor.Splitter->splitterable在Camel中完成的, 调用ObjectHelper.createIterator(值))

一些示例代码:

路线:

from("direct:myRouteEntrypoint")
.to("myProducer")
.split().body()
.to("log:logProducedMessages");
定制生产商:

/**
 * MyProducer
 * 
 * Produces a List of String objects and sets that List into the body of
 * the message, to then be later "split"
 */
public class MyProducer implements Processor {
    public MyProducer() {
    }

    public void process(final Exchange inExchange) {

        List<String> ongoingMessages = new ArrayList<>();

        // some loop for each message
        for (int i = 0; i < 5; i++) {
            String body = "Output message from MyProducer, this is output message: " + i;
            body += ", original message body: " + inExchange.getIn().getBody();
            ongoingMessages.add(body);
        }

        inExchange.getIn().setBody(ongoingMessages);
    }
}
/**
*我的制作人
* 
*生成字符串对象的列表,并将该列表设置到
*消息,稍后将被“拆分”
*/
公共类MyProducer实现处理器{
公共生产商(){
}
公共作废流程(最终变更){
List ongoingMessages=new ArrayList();
//每个消息都有一些循环
对于(int i=0;i<5;i++){
String body=“来自MyProducer的输出消息,这是输出消息:”+i;
正文+=”,原始消息正文:“+inExchange.getIn().getBody();
ongoingMessages.add(body);
}
inExchange.getIn().setBody(ongoingMessages);
}
}
您可以看到每个“正在进行的消息”都可以访问发起它的原始消息。
如果您运行此代码,并向路由发送一条消息,您将看到创建了5条正在进行的消息并将其发送到“logProducedMessages”记录器。

我现在明白了,我进行了一些试验,对拆分器EIP有了更好的了解。谢谢