1

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

  1. 对于这种情况,Spring XD 中提供了什么样的“序列化”/“转换”?
  2. Java 序列化是否适用于这种情况?而如果自定义类是可序列化的,Spring XD会自动对对象进行序列化/反序列化,还是我们还需要在流定义/模块定义中给出一些提示呢?

谢谢,西蒙

4

1 回答 1

3

XD 使用带有远程传输的 Kryo 序列化。Java.io.serialization 理论上可以工作,但是我们不想假设有效负载类型实现了 java.io.Serializable。此外,如果有效负载是可序列化的,我个人认为自动选择 Java 序列化而不是 Kryo 没有任何优势。通过 Spring XD 的类型转换支持 Java 序列化。

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

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

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

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

于 2014-11-17T16:23:20.867 回答