是否发布了Spring Integration网关线程

时间:2015-10-06 15:15:51

标签: spring-integration

<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通道。

此网关是否会导致内存泄漏。我该如何检查?有没有办法确保在一段时间后释放为处理网关请求而启动的线程。

1 个答案:

答案 0 :(得分:2)

如果通道chainC下游的流可能没有返回回复,则需要设置reply-timeout以释放线程,否则该线程将等待永远不会发出的回复。

只要您在该子流中没有异步切换,就可以安全地设置reply-timeout="0",因为在这种情况下,定时器在子流完成之前不会启动。

如果chainC总是返回结果或异常,则该配置不会发生内存泄漏。