Spring integration 当使用tcp入站网关时,套接字正在超时,并向其发送响应

Spring integration 当使用tcp入站网关时,套接字正在超时,并向其发送响应,spring-integration,Spring Integration,这就是我的配置: <int-ip:tcp-connection-factory id="myServer" type="server" port="${port}" deserializer="serializeDeserialize" serializer="serializeDeserialize" single-use="true" using-nio="true" so-linger="500" backlog="10

这就是我的配置:

<int-ip:tcp-connection-factory id="myServer"
        type="server" port="${port}" deserializer="serializeDeserialize"
        serializer="serializeDeserialize" single-use="true"
        using-nio="true" so-linger="500"
        backlog="100" so-timeout="10000"
        lookup-host="false" />

    <bean id="serializeDeserialize"
        class="org.springframework.integration.ip.tcp.serializer.ByteArrayRawSerializer" />


    <int-ip:tcp-inbound-gateway id="myGateway"
        connection-factory="myServer" request-channel="inputMessagechannel"
        error-channel="errorChannel" reply-timeout="10000"/>

    <int:service-activator input-channel="inputMessagechannel"
        ref="messageReceiver" method="process" />

虽然ServiceActivator在一秒钟内返回响应,但我仍然看到套接字已关闭。以下是日志:

2015-03-14 11:48:15,806  WARN [pool-2-thread-1] (AbstractConnectionFactory.java:555) - Timing out TcpNioConnection 20124 : 101.222.165.210:46930:632ce959-35ca-4f8e-be7f-5be3ecc166b0
2015-03-14 11:48:17,155  INFO [pool-2-thread-14] (InputMessageReceiver.java:69) - Message from <payload printed here>
2015-03-14 11:48:17,156 ERROR [pool-2-thread-14] (TcpInboundGateway.java:105) - Connection not found when processing reply [Payload=RESPONSE][Headers={timestamp=1426313897156, id=2ae8bb69-859a-4632-ac13-1a52fa493e56, ip_tcp_remotePort=46930, ip_address=101.222.165.210, ip_hostname=101.222.165.210, ip_connectionId=101.222.165.210:46930:632ce959-35ca-4f8e-be7f-5be3ecc166b0}] for [Payload=[B@132509][Headers={timestamp=1426313897154, id=a0c2dfc9-d097-448e-bf4d-15465903cf0c, ip_tcp_remotePort=46930, ip_address=101.222.165.210, ip_hostname=101.222.165.210, ip_connectionId=101.222.165.210:46930:632ce959-35ca-4f8e-be7f-5be3ecc166b0}]
2015-03-14 11:48:15806警告[pool-2-thread-1](AbstractConnectionFactory.java:555)-超时TcpNioConnection 20124:101.222.165.210:46930:632ce959-35ca-4f8e-be7f-5be3ecc166b0
2015-03-14 11:48:17155信息[pool-2-thread-14](InputMessageReceiver.java:69)-来自
2015-03-14 11:48:17156错误[pool-2-thread-14](TcpInboundGateway.java:105)-处理回复[Payload=RESPONSE][Headers]时未找到连接={时间戳=1426313897156,id=2ae8bb69-859a-4632-ac13-1a52fa493e56,ip_-tcp_-remotePort=46930,ip_地址=101.222.165.210,ip_主机名=101.222.165.210,ip_连接id=101.222.165.210:46930:632ce959-35ca-4f8e-be7f-5BE3C166B0}]=[B@132509][标题={timestamp=1426313897154,id=a0c2dfc9-d097-448e-bf4d-15465903cf0c,ip_-tcp_-remotePort=46930,ip_-address=101.222.165.210,ip_-hostname=101.222.165.210,ip_-connectionId=101.222.165.210:46930:632ce959-35ca-4f8e-be7f-5be3ecc166b0}]
知道如何让它工作吗?我猜
序列化反序列化
与此有关,因为即使在有效负载发送到SA之前,连接也会超时,或者可能是在连接超时时转发有效负载,并将其标记为消息结尾:(因此,如果是这种情况,请建议任何合适的序列化方法。)(此处不适合使用提供的默认值,因为消息由“;”分隔,并且只有在发送对第一条消息的响应时,才能接收后续消息。

读取


ByteArrayRawSerializer
通过对等方关闭套接字来检测流的结束;您需要使用配置为检测
ByteArraySingleTerminatorSerializer
作为终止字符。

谢谢。我将尝试使用这个,但不确定dserialize是否可以工作,因为它没有任何终止字符响应传入的套接字流时使用字符。与此同时,我确实通过退出while循环对ByteArrayRawSerializer进行了一些攻击,当找到此终止字符时,它已起作用,因为在replyTimeout之前发送了响应。TCP是一个流;没有对数据施加任何结构。您需要自定义(de)序列化程序,如果您没有一致/简单的格式来使用提供的类之一分隔来自流的消息。