我的问题看起来很简单,但是我还没有找到解决它的方法...
我有一个正在运行的遗留系统和一个将取代它的新系统。这只是 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/