然而,docs中的描述并没有真正描述编解码器与MessageConverter
的不同之处,或者在哪些场景中使用哪种抽象?
基本上我想知道的是:
Codec
抽象在看似与MessageConverter
相似时引入?Codec
而不是MessageConverter
,反之亦然?此问题在Spring Cloud Stream的上下文中突出显示,其中配置了默认Kryo Codec,但最近已有工作around MessageConverter
's。
答案 0 :(得分:2)
这有点灰色。
MessageConverters
在Spring Integration中用于两个方面:
Message<?>
- 例如来自/来自mqtt消息。另一方面,编解码器只在将它们放在线路上时处理消息有效负载(在XD中为MessageBus
或在Spring Cloud Stream中为Binder
)。 Kryo是Java序列化的替代品。
应用程序通常不直接处理编解码器,但Spring Integration提供CodecMessageConverter
,它在转换时采用编解码器对有效负载进行编码/解码。
它还提供了一个基于编解码器的转换器,因此应用程序可以在流程中的其他位置进行编码/解码(如果愿意)。
因此,在Spring Cloud Stream的上下文中,Kryo Codec用于对Binder中的有效负载进行编码/解码。
消息转换器用于使用频道dataType
功能在Binder绑定到传输的应用程序内实现转换。
让我们看一下使用Spring Cloud DataFlow的示例:
stream create foo --definition "source | processor --outputType=application/json | sink"
让我们说源会发出处理器收到的一些POJO,处理器内部通常会发出Map
个对象,但是接收器想要接收JSON,然后是MessageConverter
因为outputType
声明而为你做这件事。
源和处理器以及处理器和接收器之间的数据以kryo的形式传输。