<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通道。
此网关是否会导致内存泄漏。我该如何检查?有没有办法确保在一段时间后释放为处理网关请求而启动的线程。
答案 0 :(得分:2)
如果通道chainC
下游的流可能没有返回回复,则需要设置reply-timeout
以释放线程,否则该线程将等待永远不会发出的回复。
只要您在该子流中没有异步切换,就可以安全地设置reply-timeout="0"
,因为在这种情况下,定时器在子流完成之前不会启动。
如果chainC
总是返回结果或异常,则该配置不会发生内存泄漏。