Spring 集成 Handle 与 Transform

Sha*_*mil 3 transform handle spring-integration

你能解释一下,如果bouth方法可以返回新的有效负载类型,为什么我应该使用transform方法而不是使用spring集成的handle?

例如

@Bean
public IntegrationFlow integerFlow() {
    return f -> f.handle(Integer.class, (p, h) -> p * 2);
}
Run Code Online (Sandbox Code Playgroud)

@Bean
public IntegrationFlow integerFlow() {
    return f -> f.transform(Integer.class, p -> p * 2);
}
Run Code Online (Sandbox Code Playgroud)

为什么做同样的事情。我想是这样。

Art*_*lan 6

对于您的简单示例来说,它们是相同的,但在许多其他用例中,最好选择其中之一。

第一个区别是,当您返回整个Message而不是仅返回时,变压器可以完全控制payload。框架中的转换器不会修改此类消息并将其按原样生成到输出通道。同时,服务激活器修改该消息复制请求标头。Message因此,当您要从变压器返回 a 时,始终需要记住:您还需要自己携带请求标头。否则,您可能会丢失一些方便的标头(例如replyChannel相关详细信息),并且下游逻辑将无法工作。

另一个区别是转换器总是需要返回一些结果值。服务激活器在这件事上是宽容的,并且出于某种原因,您可以自由返回null以停止流程。

老实说,我总是说:Transformer 是一个特定的服务激活器实现,有其特定的逻辑和需求。

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#messaging-transformation-chapter