Spring XD 使用自定义 TCP 序列化程序

Spring XD Using custom TCP serializer

我扩展了 AbstractByteArraySerializer,现在我想像使用其他可用的 TCP 序列化程序(LF、NULL、L1、...)一样使用这个序列化程序。

我在 tcp-encdec.xml 中找到了个人资料并注册了我自己的个人资料:

...

<beans profile="use-custom">
    <bean id="CUSTOM"
        class="custom.tcp.serializer.ByteArrayCustomSerializer">
        <property name="maxMessageSize" value="${bufferSize}" />
    </bean>
</beans>

...

Spring 使用 EncoderDecoderMixins.EncodingEncoding 转换为特定配置文件。

EncoderDecoderMixins.Encoding 是最终 class 中的一个枚举。 Spring 将 decoder TCP 属性 转换为基于此枚举的特定配置文件。我的 CUSTOM 序列化程序无法工作,因为它不在指定的 Encodings.

有没有办法注册一个新的 Encoding 或者我是否必须编写一个新的 Source 模块才能使用我的序列化程序?

很遗憾,您将需要自定义源;我们可能会添加另一个枚举,例如 CUSTOM,您可以在其中提供反序列化器的类名,但这需要对标准源进行更改。

一个快速而肮脏的解决方法是在本地修改源代码:

<int-ip:tcp-connection-factory id="connectionFactory"
    ...
    deserializer="myDeserializer"/>

<bean id="myDeserializer" class="foo.Deser" />

即更改 ${decoder} 占位符以指向您的 bean。