这是一个灰色地带。
MessageConverters
在 Spring Integration 中用于两个方面:
- 将消息的某些外部表示转换为 spring-messaging
Message<?>
- 例如到/来自 mqtt 消息。
- 在消息通道上实现数据类型。
另一方面,编解码器仅在将消息有效负载放在网络上时(MessageBus
在 XD 或Binder
Spring Cloud Stream 中)处理它们。Kryo 是 Java 序列化的替代方案。
应用程序通常不会直接处理编解码器,但 Spring Integration 提供了一个CodecMessageConverter
在转换时使用编解码器对有效负载进行编码/解码的方法。
它还提供了一个基于编解码器的转换器,因此应用程序可以在流程中的其他地方进行编码/解码(如果它愿意)。
因此,在 Spring Cloud Stream 的上下文中,Kryo 编解码器用于对 Binder 中的有效负载进行编码/解码。
dataType
消息转换器用于使用通道功能在绑定到传输的应用程序中实现转换。
让我们看一个使用 Spring Cloud DataFlow 的示例:
stream create foo --definition "source | processor --outputType=application/json | sink"
假设源发出一些由处理器接收的 POJO,而处理器内部通常会发出一个Map
对象,但接收器想要接收 JSON,那么MessageConverter
由于outputType
声明,a 会为您执行此操作。
源和处理器以及处理器和接收器之间的数据以 kryo 的形式传输。