Spring 集成 JAVA DSL 在后续调用中使用原始负载

Spring Integration JAVA DSL Using original payload in a subsequent call

我正在使用 spring 集成来定义一个将做两件事的流程 - 首先使用给定的负载执行 http 调用,然后使用提供的响应和原始负载进行另一个 http 调用。

如何实现?在下面的代码中,我能够使用和修改第一个有效载荷并在 firstHttpRequest 中使用它,但是我如何才能将原始有效载荷与 firstHttpRequest 的响应一起使用?

有什么好的做法吗?

@Bean
public IntegrationFlow makeHttpCalls(){

    return message -> message               
             .transform(new GenericTransformer<Message<String>, String>() {
                    @Override
                    public String transform(Message<String> message){
                            return message.getPayload() + " first call";    
                    }    
             })
             .handle(makeFirstHttpRequest())
             .transform(new GenericTransformer<Message<String>, String>() {
                @Override
                public String transform(Message<String> message) {
                    logger.debug("Response from transform: " + message);
                    return message.getPayload();
                }
             }) 
            .handle(makeSecondHttpRequest())
            .channel("entrypoint");
}

一种方法是 .enrichHeaders() 并将原始 payload 放入一个自定义 header 中。因此下游,响应后,处理 header 以恢复原始 payload.

另一种方法是 .enrich() 当您进行外部调用并使用来自回复的信息丰富原始消息时。

还有其他工具,例如 .routeToRecipients().publishSubscribeChannel(),您可以将相同的消息发送到不同的 sub-flows 以获得不同的逻辑。

但这就是你必须选择的。