我有以下 spring 集成 TCP 连接:
<int-ip:tcp-connection-factory id="client" type="client" host="..." port="..." single-use="true" so-timeout="10000"/>
我希望能够在发生协议(protocol)级问题时强制重新连接。那可以吗?怎么办?
最佳答案
鉴于您有 single-use
设置为 true
,每个请求只使用一次套接字,因此“重新连接失败”没有意义,因为无论如何都会为每个请求建立一个新连接。
与 single-use="false"
(共享连接),如果您使用带有 <int-ip:output-channel-adapter/>
的工厂你可以设置client-mode
为真;这将在超时后自动重新连接(并且您可以通过在适配器上调用 retryConnection()
显式地重新建立共享连接。但是,出站网关当前不支持 client-mode
。请参阅 TCP Adapters 并使用您的浏览器来查找“客户端模式”以获取更多信息。
也就是说,使用 single-use="false"
, 你可以简单地调用 getConnection()
在客户端工厂上,它将重新建立共享连接(但你不能对连接做任何事情)。此外,不要使用 single-use="true"
执行此操作但是,因为它会导致内存泄漏(除非您 close()
连接 - 这没有任何意义 - 获取连接只是为了关闭它)。
关于Spring集成TCP,强制重连,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15659757/