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 是一种特定的服务激活器实现,具有特定的逻辑和要求。
你能解释一下吗,如果 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 是一种特定的服务激活器实现,具有特定的逻辑和要求。