【问题标题】:Routing multiple messages to same stream in apache camel将多条消息路由到 apache camel 中的同一流
【发布时间】:2020-01-15 17:56:27
【问题描述】:

我想出了一个场景,我将创建多个 XML 消息并将它们设置为 Exchange 对象的一部分。

在我的路由器中,如何将交换主体中设置的多个消息部分路由到同一个流?基本上我必须将两组不同的消息作为属性的一部分发送到 MQ。

处理器代码

public void process(Exchange exchange) throws Exception {
exchange.setProperty("msg1", xml1);
exchange.setProperty("msg2",xml2);
}

路由器代码

@Override
    public void configure() {
from("solace:q")
.process(aboveProcessor)
..?//code to route both messages as two different messages to same MQ.
}

如果我应该使用其他方法,请告诉我。

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    您可以在处理器中填充一个列表,将正文设置为结果列表,而不是设置无论如何都不会与 JMS 消息一起发送的 Exchange 属性:

    public void process(Exchange exchange) throws Exception {
        List<Object> list = new ArrayList<Object>();
        list.add( xml1 );
        list.add( xml2 );
        exchange.getIn().setBody( list );
    }
    

    然后拆分列表,然后发送到您的队列:

    from("solace:q")
      .process(aboveProcessor)
      .split(body())
        .to("mq:myQueue");
    

    这假设您将两个 XML 文档中的每一个都发送到同一个队列,并且具有相同的消息头。

    【讨论】:

    • 在 split() 之后不允许使用 to("mq:myQueue");我应该使用 split(body()).to("mq:myQueue");
    • 是的 - 我认为这会很好。我稍后会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多