Fuse ESB:来自中间服务

时间:2015-06-22 14:31:17

标签: soap soa esb jbossfuse

我想要实现以下场景: FUSE中的CXF路由接收SOAP请求,从请求中提取多个ID,使用ID创建不同的SOAP消息,将其发送到服务A.此服务回复与这些ID关联的数据,并且路由应将这些数据插入到原始邮件并将其发送到最终目标服务。 简而言之,在将消息发送到最终目的地之前,我们必须绕道而行,并使用来自中间服务的数据来丰富我们的原始消息。 我正在研究正确的配置(我们使用Fuse ESB 6.2预发布版和基于Spring的蓝图XML)。

更新我更新了我的答案,因为经过一系列的反复试验后我的问题得到了彻底解决。

1 个答案:

答案 0 :(得分:0)

好的,实际工作的版本是:

路由配置: 在同一个骆驼语境中,浓缩电话必须是一个独立的路线:

<route id="direct:enrichroute">
            <from uri="direct:enrichroute"/>
            <bean ref="processorBean"/>
            <to uri="cxf:bean:intermediateEndpoint"/>
</route>

在实际路由中,我们在from和to之间插入richten并配置聚合策略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是最终目标。 使用此配置,富集路由中的处理器获取请求主体,以便它可以创建富集请求主体,将其发送到富集端点。此外,在实际路由中,聚合处理器知道原始请求主体和富集响应主体,因此它可以插入必要的数据。

处理器类:

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);
    }
}

聚合策略类:

public class AggregationStrategyBean implements AggregationStrategy {

    @Override
    public Exchange aggregate(Exchange originalExchange, Exchange intermediateExchange) {
    }
}