当前位置: 首页 > 知识库问答 >
问题:

spring集成tcp出界异常

申昌勋
2023-03-14

我们使用的是Spring集成4.1.3。

使用tcp出站网关实现客户端

请求期间从服务器收到一个tcp rset数据包,发生异常。什么原因?谢谢。

    // interface
    public interface TcpSendGateway {
        public byte[] send(String text);
    } 
    // send
    byte[] response = sendGateway.send(request);




    <int:gateway id="gw"
                 service-interface="com.mainpay.service.TcpSendGateway"
                 default-request-channel="input"
                 default-reply-channel="reply"/>

    <int-tcp:tcp-connection-factory id="client"
                                    type="client"
                                    host="#{prop['app.cultureland.host']}"
                                    port="#{prop['app.cultureland.port']}"
                                    so-timeout="10000"
                                    single-use="false"
                                    so-keep-alive="true"
    />                         
    <int:channel id="input" />
    <int-tcp:tcp-outbound-gateway id="outGateway" 
                                  request-channel="input"
                                  reply-channel="reply"
                                  connection-factory="client"
                                  request-timeout="10000"                                      
                                  reply-timeout="10000"                                                                                                               
                                  />        
    <int:channel id="reply" datatype="java.lang.String" />

错误日志

▶ 17.09.29 17:07:37 [pool-2-thread-2] ERROR o.s.i.i.t.c.TcpNetConnection - Read exception 211.59.10.133:7611:51503:d2ec0199-fd15-49c0-bd99-0d864eb2145b SocketException:Connection reset
▶ 17.09.29 17:07:39 [http-nio-19900-exec-5] ERROR o.s.i.ip.tcp.TcpOutboundGateway - Tcp Gateway exception
org.springframework.messaging.MessagingException: Exception while awaiting reply; nested exception is java.net.SocketException: Connection reset
    at org.springframework.integration.ip.tcp.TcpOutboundGateway$AsyncReply.getReply(TcpOutboundGateway.java:288)

wireshark日志在此处输入图像描述

共有2个答案

昌乐
2023-03-14

JAVA网SocketException:连接重置

意味着服务器出于某种原因强制关闭套接字(RST)。您需要查看服务器日志。

也许它不期望默认的线格式(由CRLF-0x0d0a终止的文本)。

翟学文
2023-03-14

我认为您应该确保您的客户端和服务器同意(反)序列化协议。有关更多信息,请参阅参考手册:

TCP是一种流协议;这意味着必须为通过TCP传输的数据提供某种结构,以便接收方可以将数据划分为离散消息。连接工厂配置为使用(反)序列化器在消息有效负载和通过TCP发送的位之间进行转换。

默认值是ByteArrayCrLfSerializer,它处理消息分隔符。

因此,您的客户端可能会收到该包,但由于它不符合正确的分隔符,因此无法等待答复。

 类似资料:
  • 我有一个要求,在我必须使用不同的有效负载值对Httpendpoint进行Http出站调用的循环中,调用函数不必等待从出站调用收到的响应,因此基本上出站调用将在循环中异步发生。 有没有办法用Http.outbound网关

  • 可能是一个简单的方法, 我想要的是:我有一个监听传入连接的tcp服务器。当客户连接时,我希望以某种方式得到通知。TcpNetServerConnectionFactory内部有这样的信息"接受的连接..."。 有一个TcpConnectionSupport类,但是我找不到如何使用它的方法。我正在寻找类似的用户模式。 有什么办法可以做到吗?

  • 我从官方提供的. WAR文件中运行了以下Activiti 6应用程序。已经成功地将这些部署到我的localhost activiti应用程序-http://localhost:8080/activiti-管理员//li> 活动管理员-http://localhost:8080/activiti-管理员//li> 活动Rest-http://localhost:8080/activiti-Rest/

  • 如果spring集成webflux流中发生异常,则异常本身(带有stacktrace)通过MessagePublishingErrorHandler作为有效负载发送回调用方,该处理器使用来自“errorChannel”头的错误通道,而不是默认错误通道。 如何设置类似于WebExceptionHandler的错误处理程序?我想生成一个Http状态代码,并可能生成一个DefaultErrorAttri

  • 我试图创建一个接受入站连接的Tcp服务器,并异步地向连接的客户端发送消息。有一个Tcp服务器的示例,但它使用的是网关,是请求/响应,不支持异步。 null 异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是org.springframework.messaging.messagehandlingException:无