合并两个http请求的结果(spring integration)

时间:2015-11-09 21:12:39

标签: spring spring-integration

我正在努力做到以下几点:

创建两个http请求(getData和getMetadata),然后将结果合并到这样的有效负载中:{res1:getDataResult,res2:getMetadataResult},然后将其传递给'resultChannel'。

<int:header-enricher input-channel="request" output-channel="getData">
    <int:header name="prop" value="1"/>
</int:header-enricher>

<int-http:outbound-gateway
        request-channel="getData"
        url-expression="'https://x.y.z/{param1}'"
        http-method="GET"
        reply-channel="aggregate"
        expected-response-type="java.util.HashMap"
        request-factory="restFactory">
    <int-http:uri-variable name="param1" expression="payload.param1"/>
</int-http:outbound-gateway>

<int-http:outbound-gateway
        request-channel="getData"
        url-expression="'https://x.y.z/{param2}'"
        http-method="GET"
        reply-channel="aggregate"
        expected-response-type="java.util.HashMap"
        request-factory="restFactory">
    <int-http:uri-variable name="param2" expression="payload.param2"/>
</int-http:outbound-gateway>

<int:aggregator
        release-strategy-expression="size() == 2"
        input-channel="aggregate"
        output-channel="resultChannel"
        correlation-strategy-expression="headers['prop']"
        expire-groups-upon-completion="true">
</int:aggregator>
<!---->

<int:channel id="resultChannel" />

作为输入,我有一个有效载荷,其中包含必须用于请求的param1和param2。

1 个答案:

答案 0 :(得分:0)

使用aggregator

您需要一个关联策略(将两个回复分组);发布策略可能与release-strategy-expression="size() == 2"一样简单。

如果您设置标头,请在两个请求中将foo说成某个值,请使用correlation-strategy-expression="headers['foo']"

聚合器将两个回复配对并将它们作为集合发布;然后,您可以使用<transformer/>来生成最终结果。

只要设置expire-groups-upon-completion="true",就可以重复使用相同的相关值。否则,将丢弃具有已释放关联的消息。