在Spring XD中通过远程传输传递Java对象

时间:2014-11-17 14:33:43

标签: spring-xd

如果消息有效负载从一个"过滤器"到下一个"过滤器"在Spring XD流中是一个自定义的Java类实例,我想如果" pipe"需要某种序列化机制。中间是一个远程运输。

  1. 什么样的"序列化" /"转换"在这种情况下可以在Spring XD中使用吗?
  2. Java序列化是否适用于此案例?如果自定义类是可序列化的,Spring XD会自动序列化/反序列化对象,还是我们还需要在流定义/模块定义中给出一些提示?
  3. 谢谢, 西蒙

1 个答案:

答案 0 :(得分:3)

XD使用Kryo序列化和远程传输。 Java.io.serialization在理论上可行,但我们不想假设有效负载类型实现java.io.Serializable。另外,如果有效负载是Serializable,我个人认为在Kryo上自动选择Java序列化没有任何优势。 Spring XD的type conversion支持Java序列化。

您应该能够创建包含以下内容的流:

filter1 --outputType=--application/x-java-serialized-object | filter2 --input-type=my.custom.SerializablePayloadType

在这种情况下,类型转换将在命中传输之前使用Java序列化。消息总线将检测到有效负载是一个字节数组,并将其直接发送到下一个模块。包含字节的消息将content-type标头设置为声明的outputType,以便可以通过入站转换器使用Java序列化对其进行反序列化。

以上要求有效负载实现Serializable。 Spring XD的类路径中也必须包含自定义有效负载类型,即在每个已安装的容器上添加jar到xd / lib。