Fuse ESB:来自中间服务的 CXF 消息丰富
Fuse ESB: CXF message enrichment from intermediate service
我想实现以下场景:
FUSE 中的 CXF 路由接收 SOAP 请求,从请求中提取一些 ID,使用这些 ID 创建不同的 SOAP 消息,将其发送到服务 A。该服务回复与这些 ID 关联的数据,路由应将这些数据插入到原始消息并将其发送到最终目标服务。
所以简而言之,在将消息发送到最终目的地之前,我们必须绕道而行,并使用来自中间服务的数据丰富我们的原始消息。
我正在研究正确的配置(我们正在使用 Fuse ESB 6.2 预发布版和基于 Spring 的蓝图 XML)。
UPDATE 我正在更新我的答案,因为经过反复试验,我的问题已经完全解决了。
好的,实际工作的版本是:
路由配置:
浓缩调用必须是同一 camel 上下文中的单独路由:
<route id="direct:enrichroute">
<from uri="direct:enrichroute"/>
<bean ref="processorBean"/>
<to uri="cxf:bean:intermediateEndpoint"/>
</route>
在实际路由中,我们在from和to之间插入enrichment,配置聚合策略bean:
<route id="someRoute">
<from uri="cxf:bean:incomingEndpoint"/>
<enrich uri="direct:enrichroute" strategyRef="aggregationStrategyBean"/>
<to uri="cxf:bean:finalEndpoint"/>
</route>
其中 cxf:bean:incomingEndpoint 是我们 ESB 中的入口点,finalEndpoint 是最终目的地。
使用此配置,丰富路由中的处理器获取请求主体,因此它可以创建丰富请求主体,将其发送到丰富端点。此外,在实际路由中,聚合处理器知道原始请求主体和丰富响应主体,因此它可以插入必要的数据。
处理器class:
public class ProcessorBean implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
// original request body can be fetched from exchange
// we can override the request body before sending it
exchange.getIn().setBody(newRq);
}
}
聚合策略class:
public class AggregationStrategyBean implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange originalExchange, Exchange intermediateExchange) {
}
}
我想实现以下场景: FUSE 中的 CXF 路由接收 SOAP 请求,从请求中提取一些 ID,使用这些 ID 创建不同的 SOAP 消息,将其发送到服务 A。该服务回复与这些 ID 关联的数据,路由应将这些数据插入到原始消息并将其发送到最终目标服务。 所以简而言之,在将消息发送到最终目的地之前,我们必须绕道而行,并使用来自中间服务的数据丰富我们的原始消息。 我正在研究正确的配置(我们正在使用 Fuse ESB 6.2 预发布版和基于 Spring 的蓝图 XML)。
UPDATE 我正在更新我的答案,因为经过反复试验,我的问题已经完全解决了。
好的,实际工作的版本是:
路由配置: 浓缩调用必须是同一 camel 上下文中的单独路由:
<route id="direct:enrichroute">
<from uri="direct:enrichroute"/>
<bean ref="processorBean"/>
<to uri="cxf:bean:intermediateEndpoint"/>
</route>
在实际路由中,我们在from和to之间插入enrichment,配置聚合策略bean:
<route id="someRoute">
<from uri="cxf:bean:incomingEndpoint"/>
<enrich uri="direct:enrichroute" strategyRef="aggregationStrategyBean"/>
<to uri="cxf:bean:finalEndpoint"/>
</route>
其中 cxf:bean:incomingEndpoint 是我们 ESB 中的入口点,finalEndpoint 是最终目的地。 使用此配置,丰富路由中的处理器获取请求主体,因此它可以创建丰富请求主体,将其发送到丰富端点。此外,在实际路由中,聚合处理器知道原始请求主体和丰富响应主体,因此它可以插入必要的数据。
处理器class:
public class ProcessorBean implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
// original request body can be fetched from exchange
// we can override the request body before sending it
exchange.getIn().setBody(newRq);
}
}
聚合策略class:
public class AggregationStrategyBean implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange originalExchange, Exchange intermediateExchange) {
}
}