Spring 集成网关线程是否释放
Spring Integration gateway threads released or not
<gateway id="testService" service-interface="org.example.TestService"
default-request-channel="requestChannel"/>
public interface TestService {
void placeOrder(Order order);
}
<int:router input-channel="requestchannel" expression="payload.name">
<int:mapping value="foo" channel="channel_one" />
....
</int:router>
<int:chain input-channel="channel_one" output-channel="channel_default" >
<int:gateway request-channel="chainC" error-channel="errChannel"/>
<int:filter expression="headers['Release'] != null" discard-channel="nullChannel"/>
</int:chain>
此链中有两条路径 - 成功路径移至 channel_default 和错误路径移至空通道。
这个网关会不会导致内存泄漏。我该如何检查?有什么方法可以确保为处理网关请求而启动的线程在一段时间后被释放。
如果通道 chainC
的下游流量可能不会 return 回复,您需要设置 reply-timeout
以释放线程,否则该线程将挂起等待回复永远不会来。
只要您在该子流中没有异步切换,设置 reply-timeout="0"
是安全的,因为在这种情况下,计时器在子流完成之前不会启动。
如果 chainC
总是 return 结果或异常,则该配置不可能发生内存泄漏。
<gateway id="testService" service-interface="org.example.TestService"
default-request-channel="requestChannel"/>
public interface TestService {
void placeOrder(Order order);
}
<int:router input-channel="requestchannel" expression="payload.name">
<int:mapping value="foo" channel="channel_one" />
....
</int:router>
<int:chain input-channel="channel_one" output-channel="channel_default" >
<int:gateway request-channel="chainC" error-channel="errChannel"/>
<int:filter expression="headers['Release'] != null" discard-channel="nullChannel"/>
</int:chain>
此链中有两条路径 - 成功路径移至 channel_default 和错误路径移至空通道。
这个网关会不会导致内存泄漏。我该如何检查?有什么方法可以确保为处理网关请求而启动的线程在一段时间后被释放。
如果通道 chainC
的下游流量可能不会 return 回复,您需要设置 reply-timeout
以释放线程,否则该线程将挂起等待回复永远不会来。
只要您在该子流中没有异步切换,设置 reply-timeout="0"
是安全的,因为在这种情况下,计时器在子流完成之前不会启动。
如果 chainC
总是 return 结果或异常,则该配置不可能发生内存泄漏。