1

从逻辑的角度来看,这是我希望实现的路由行为:

路由信息的逻辑视图

我希望能够将外部服务的响应与原始请求合并。

我已经能够使用多播、聚合器和模拟端点来实现这一点,但我想知道是否有更清洁的方法。我当前的实现如下所示:

        <multicast strategyRef="serviceAggregator" stopOnException="false">
            <to uri="mock:foo" />
            <to uri="http://0.0.0.0:9999/service/?throwExceptionOnFailure=false" />
        </multicast>
        <camel:to uri="log:uk.co.company.aggregated?showAll=true" />
        <to uri="http://0.0.0.0:9999/anotherService/ 

我特别不喜欢的部分是使用模拟端点,但我也不认为这是表达上图的一种非常易读的方式。所以我想知道是否有更优雅的方式来做到这一点?

4

2 回答 2

4

我建议阅读 EIP 模式,例如内容丰富器 http://camel.apache.org/content-enricher.html

您可以在其中将回复消息与请求消息合并。

Mind the Content Enricher 有 2 种模式 - 丰富 - pollEnrich

请务必注意上面链接中的文档中的差异。

<route>
  <from uri="...">
  <enrich uri="http://0.0.0.0:9999/service/?throwExceptionOnFailure=false" strategyRef="serviceAggregator"/>
  <to uri="log:uk.co.company.aggregated?showAll=true" />
  <to uri="http://0.0.0.0:9999/anotherService/>
  ...
</route>

是的,您的图表显示了拆分器,但示例代码使用了多播 EIP。

于 2012-06-22T13:56:29.460 回答
0

您可以简单地将原始消息存储在标头或属性中,然后在 bean 中进行一些合并。使用标题和当前正文。

.setHeader("orig", body()) .to("externalService") .bean(new MyMergeBean())

于 2012-06-22T14:49:46.387 回答