Spring Integration:使用来自一个调用的响应作为后续调用的输入之一

时间:2016-07-05 17:06:27

标签: spring-integration

我正在使用Spring集成的业务流程层工作,我想按如下方式处理请求:

<int:recipient-list-router id="cfRequestRouter" input-channel="cfRequestChannel">
    <int:recipient channel="Op1RequestChannel"/> <!-- Calls Op1 Gateway -->
    <int:recipient channel="Op2RequestChannel"/> <!-- Calls Op2 Gateway -->
    <int:recipient channel="Op3RequestChannel"/> <!-- Calls Op3 Gateway -->             
    <int:recipient channel="AsyncOp4RequestChannel"/> <!-- Calls Op4 Gateway -->
</int:recipient-list-router>

请求首先发送到Op1RequestChannel,然后将其发送到Op1以处理请求。 在Op1 Gateway成功处理后,原始请求将发送到Op2 Gateway。 我必须使用从Op2 Gateway收到的响应中的一些信息 并将其与cfRequestChannel上收到的原始请求相结合,并在Op3 Gateway处理请求后将其发送到AsyncOp4RequestChannel进行进一步处理。

我尝试使用Claim Check模式来存储来自Op2RequestChannel的响应,并将其存储为Op2 Gateway上返回的响应头,但不确定如何从此响应中获取头并将其传递给AsyncOp4RequestChannel。 此外,如何在转发器内进行声明检出,以便在将数据发送到Op4网关之前检索要添加为有效负载的数据。

有关如何执行此操作的任何建议?

更新

消息来自cfRequestChannel(请求是4个流中每个流所需的所有字段的组合)

- &GT;调用Op1 Flow(REST API调用)来验证资格

- &GT;收到Http 200后,发送到Op2流程 - &gt; Op2流程(REST API调用)在成功处理时创建唯一的Id。如果不是Http 200,请将其作为错误发送回客户端

- &GT;如果Op2流程成功,请调用Op3流程(REST API调用),以更新另一个系统。响应包含状态字段,该字段可以包含2个值 - 已批准,待定。如果已批准,则从Op2流中收集唯一ID,并从原始消息中收集少量字段,然后发送到Op4流进行记录。如果待定,则使用通用消息来调用Op4流。如果在Op3流程中发生错误,请发送回客户端。

- &GT;如果Op3流程成功,请对Op4进行asyc调用,并立即将成功代码返回给客户端

2 个答案:

答案 0 :(得分:1)

如果AsyncOp4不仅使用原始消息,而且还使用Op2的响应,则需要使用内容丰富程序来丰富或完全将该消息转换为另一个消息,然后将转换后的消息发送到AsyncOp4 < / p>

答案 1 :(得分:0)

使用浓缩器调用Op2流程; richser可用于向有效载荷和/或标题添加内容。

See the documentation