<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,错误路径移动到null通道。
这个网关会导致内存泄漏吗?我怎么检查呢?是否有办法确保为处理网关请求而启动的线程在一段时间后被释放?
如果通道chainC
的下游流可能不会返回回复,则需要设置reply-timeout
以释放线程,否则该线程将挂起等待永远不会出现的回复。
只要在该子流中没有异步切换,设置reply-timeout="0"
是安全的,因为在这种情况下,计时器直到子流完成才启动。
如果chainC
总是返回结果或异常,则该配置不存在内存泄漏的可能性。