我有 SOAP 服务,它使用 tcp 连接与外部服务进行交互。我为此 tcp 服务使用连接池。当我启动我的应用程序并发送第一个 SOAP 请求时 - 一切正常,但如果我等待 1 分钟 - 那么我没有得到响应。但是当我用 Wireshark 嗅探流量时——我明白了,返回的是什么响应。还有一点点额外的 - 如果我没有等待 1 分钟并发送新请求 - 一切正常。仅当等待 1 分钟时才会出现问题。这是我对池和 tcp 的配置:
<beans profile="single">
<bean id="testConnectionFactory" class="com.test.provider.impl.ProviderTcpConnectionFactory">
<constructor-arg name="host" value="localhost"/>
<constructor-arg name="port" value="7700"/>
<property name="connectionTimeout" value="10000"/>
<property name="soTimeout" value="60000"/>
<property name="deserializer" ref="testDeserializer"/>
<property name="singleUse" value="true"/>
</bean>
</beans>
<beans profile="pool">
<bean id="testConnection" class="com.test.provider.impl.ProviderTcpConnectionFactory">
<constructor-arg name="host" value="localhost"/>
<constructor-arg name="port" value="7700"/>
<property name="connectionTimeout" value="10000"/>
<property name="soTimeout" value="60000"/>
<property name="deserializer" ref="testDeserializer"/>
<property name="singleUse" value="true"/>
</bean>
<bean id="testConnectionFactory" class="org.springframework.integration.ip.tcp.connection.CachingClientConnectionFactory">
<constructor-arg ref="testConnection"/>
<constructor-arg value="5"/>
</bean>
</beans>
在日志中我看到下一行
DEBUG [org.springframework.integration.ip.tcp.connection.TcpNetConnection] Closed single use socket after timeout
据我了解 - soTimeout 过期后套接字关闭。但是如何在不关闭连接的情况下使用池?