Spring 集成处理与转换

Spring integration Handle vs Transform

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

例如

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

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

他们做同样的事情。我觉得是。

对于您的简单示例,它们是相同的,但还有许多其他 use-cases,其中一个更好。

当您 return 整个 Message 而不仅仅是 payload 时,transformer 提供完全控制的第一个区别。框架中的转换器不会修改此类消息并将其按原样生成到输出通道。同时服务激活器修改消息复制请求headers。所以,当你要从 transformer return a Message 时,始终需要牢记:你还需要自己携带 request headers。否则,您可能会丢失一些方便的 headers,例如 replyChannel 或关联细节,并且下游逻辑将无法工作。

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

老实说,我总是说:transformer 是一种特定的服务激活器实现,具有特定的逻辑和要求。

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