Spring integration 任务执行器不会立即运行下一个任务

Spring integration 任务执行器不会立即运行下一个任务,spring-integration,Spring Integration,我在下面的配置中尝试同时处理最多5个请求。 处理每个请求所需的时间大不相同。我注意到它开始处理5个任务,这很好,但当其中一个任务完成时,它不会立即接受另一个任务,事实上它正在等待所有5个任务完成,然后只开始接下来的5个任务。所以我得到了某种批处理行为。可能是我没有正确配置,请帮助更正此问题。我想在线程处理完一个任务后立即开始下一个任务 我可以增加队列容量,在这种情况下,它确实会启动下一个任务,但我只想在准备处理消息时调用入站消息提供程序,而不仅仅是将其保存在任务执行器队列中 <int:in

我在下面的配置中尝试同时处理最多5个请求。 处理每个请求所需的时间大不相同。我注意到它开始处理5个任务,这很好,但当其中一个任务完成时,它不会立即接受另一个任务,事实上它正在等待所有5个任务完成,然后只开始接下来的5个任务。所以我得到了某种批处理行为。可能是我没有正确配置,请帮助更正此问题。我想在线程处理完一个任务后立即开始下一个任务

我可以增加队列容量,在这种情况下,它确实会启动下一个任务,但我只想在准备处理消息时调用入站消息提供程序,而不仅仅是将其保存在任务执行器队列中

<int:inbound-channel-adapter ref="feeder" channel="in">
    <int:poller fixed-rate="100">        
    </int:poller>    
</int:inbound-channel-adapter>

<int:bridge input-channel="in" output-channel="out" />

    <task:executor id="taskExecutor" pool-size="1-5" keep-alive="120" 
        queue-capacity="0" rejection-policy="CALLER_RUNS"/>

<int:channel id="out">
    <int:dispatcher task-executor="taskExecutor"/>
</int:channel>


<int:service-activator input-channel="out" output-channel="replyChannel"
              ref="processor" method="process"/>

问题在于您的“呼叫方运行”策略;这意味着轮询线程运行您的一个任务(#6),并且在该任务完成之前不会再次轮询

您确实需要使用
callerblock
policy-we

您需要将TaskExecutor连接为
;命名空间不支持自定义策略

编辑:


已创建。

但有一个小问题,它会轮询下一个任务,但会一直保持到踏板可用为止。在踏板可用后,是否可以让它轮询下一个任务?我有一个优先级队列,它正在轮询,所以我想在真正准备好执行时轮询;您可能可以使用自定义触发器执行某些操作,但我怀疑它是否能完全满足您的需要。但是,您可以在轮询器的
中添加
建议,并且在执行器忙时不执行轮询。有关如何编写/配置建议,请参阅。