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

标签 http apache-camel

我的问题看起来很简单,但是我还没有找到解决它的方法...

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

为了确保等功能运行,我想将它们放在 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")
    ;

它可以调用每个服务并记录消息,但响应一团糟......

如果第一个服务器没有响应,第二个不调用,如果第二个响应错误,只有那个错误被发送回客户端...

有什么想法吗?

最佳答案

您可以在多播文档中查看更多详细信息 http://camel.apache.org/multicast.html

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

  • parallelProcessing 为 false,所以路由被一个一个地调用

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

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

关于http - 如何使用 apache camel 将消息发送到多个目的地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918942/

相关文章:

java - 如何使用java.net.URLConnection触发和处理HTTP请求?

apache-camel - Apache Camel 使用 HTTP 定义路由

http - 在 cookie 中存储压缩数据

http - 处理程序是否假设在 http 响应 header 中填充内容类型?

rest - 如何将 SOAP 信封转换为 JSON?

apache-camel - Camel 分离器 - 在特定异常时停止循环

apache-camel - Camel 多次使用来自同一 URI 的 pollEnrich 返回 null body

java - 如何从 activemq-all maven 依赖项中排除包含 StaticLoggerBinder 的 jar?

spring-boot - Spring Cloud Config 无法动态更新属性

eclipse - 在 Eclipse 项目中获取 HTTP 404 错误