我是Spring Integration的新手,目前正在尝试通过TCP从一些设备接收数据。我提出了以下Spring上下文:
<bean id="serializer" class="com.somepackage.CustomSerializer"/>
<int-ip:tcp-connection-factory id="connectionFactory"
type="server"
port="${tcp.socket.connection.listener.port}"
deserializer="serializer" />
设备协议的问题是,在初始连接时,它会发送一个握手序列,并在开始发送消息之前期待一个神奇的答案。
消息模式与握手序列不同,我无法实现区分这两者的序列化程序。如果可以的话,我会把这个握手过程作为一个拦截器来实现。因此,我尝试实现一个状态完整的序列化程序,但结果发现序列化程序是单个的,在不同的连接之间共享。
在默认机制(将数据拆分为消息)发挥作用之前,您能建议如何执行一些自定义协商(握手)吗?我应该自定义连接工厂吗?
谢谢!
我认为您需要一个自定义的TCP拦截器。来自文件:
16.4 TCP连接拦截器
可以通过引用TcpConnectionInterceptorFactoryChain来配置连接工厂。拦截器可用于向连接添加行为,例如协商、安全和其他设置。框架当前没有提供拦截器,但例如,请参阅源存储库中的InterceptedSharedConnectionTest。