2014-11-17 52 views
1

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

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

感谢, 西蒙

回答

3

XD使用KRYO序列化与远程传输。 Java.io.serialization在理论上是可行的,但是我们不希望假设有效载荷类型实现java.io.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。

+0

感谢您的回应!在查看源代码之后,我确实了解了远程传输如何利用kryo序列化来编组Spring XD中的消息负载。这是我发现的:当查看redis-bus.xml文件时,messageBus有一个constructor-arg,它指向'codec'bean。 'codec'bean实际上是在codec.xml中定义的,它揭示了使用Kryo的类。然而,我想知道Spring应用程序,在这种情况下,如果我是正确的,XD容器如何设置跨越使用多个单独的xml配置定义的上下文来组装bean? –