如何用apache camel将消息发送到多个目的地?

时间:2017-05-11 14:54:16

标签: http apache-camel

我的问题似乎很简单,但我还没有找到解决问题的方法......

我有一个正在运行的遗留系统和一个将取代它的新系统。这只是休息webservices调用,所以我在http服务上使用简单的桥接端点。

为了确保iso-functional运行,我想把它们放在一个camel路由调度消息后面两个系统,但只返回遗留的响应并记录两个系统的响应,以确保以相同的方式运行...

我创建了这条路线:

   from("servlet:proxy?matchOnUriPrefix=true")
        .streamCaching()
        .setHeader("CamelHttpMethod", header("CamelHttpMethod"))
        .to("log:com.mylog?showAll=true&multiline=true&showStreams=true")
        .multicast()
        .to(urlServer1 + "?bridgeEndpoint=true")
        .to(urlServer2 + "?bridgeEndpoint=true")
        .to("log:com.mylog?showAll=true&multiline=true&showStreams=true")
    ;

它可以调用每个服务并记录消息,但响应很乱......

如果第一台服务器没有响应,则第二台服务器不响应,如果第二台服务器响应错误,则只将该错误发送回客户端...

任何想法?

1 个答案:

答案 0 :(得分:3)

您可以在多播文档http://camel.apache.org/multicast.html

中查看更多详细信息

多播(您的情况)的默认行为是:

  • parallelProcessing为false,因此路由逐个调用

要正确实施您的案例,您可能需要:

  • 为每个外部服务调用添加错误处理,以便异常不会停止正确处理
  • 配置或实施一些聚合器策略并将其放入strategyRef,以便将所有调用的结果组合到单个多播结果中