首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tcp-inbound-gateway时,套接字超时,会向其发送响应

使用tcp-inbound-gateway时,套接字超时,会向其发送响应
EN

Stack Overflow用户
提问于 2015-03-14 14:46:41
回答 1查看 582关注 0票数 1

下面是我的配置:

代码语言:javascript
复制
<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" />

虽然服务激活器在一秒钟内返回响应,但我仍然看到套接字已关闭。日志如下:

代码语言:javascript
复制
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}]

你知道怎么让它工作吗?我猜serializeDeserialize与此有关,因为即使在将有效负载发送到SA之前,连接也会超时,或者可能会在连接超时时转发有效负载,并将其标记为消息末尾:(因此,如果是这种情况,请建议任何合适的serializeDerialize (提供的默认are不适合在此使用,因为消息由';‘分隔,并且仅当发送对第一条消息的响应时,才能接收后续消息。

EN

回答 1

Stack Overflow用户

发布于 2015-03-14 22:10:28

阅读the documentation

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29046256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档