我正在努力做到以下几点:
创建两个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。
答案 0 :(得分:0)
使用aggregator。
您需要一个关联策略(将两个回复分组);发布策略可能与release-strategy-expression="size() == 2"
一样简单。
如果您设置标头,请在两个请求中将foo
说成某个值,请使用correlation-strategy-expression="headers['foo']"
。
聚合器将两个回复配对并将它们作为集合发布;然后,您可以使用<transformer/>
来生成最终结果。
只要设置expire-groups-upon-completion="true"
,就可以重复使用相同的相关值。否则,将丢弃具有已释放关联的消息。