Spring integration 任务执行器不会立即运行下一个任务
我在下面的配置中尝试同时处理最多5个请求。 处理每个请求所需的时间大不相同。我注意到它开始处理5个任务,这很好,但当其中一个任务完成时,它不会立即接受另一个任务,事实上它正在等待所有5个任务完成,然后只开始接下来的5个任务。所以我得到了某种批处理行为。可能是我没有正确配置,请帮助更正此问题。我想在线程处理完一个任务后立即开始下一个任务 我可以增加队列容量,在这种情况下,它确实会启动下一个任务,但我只想在准备处理消息时调用入站消息提供程序,而不仅仅是将其保存在任务执行器队列中Spring integration 任务执行器不会立即运行下一个任务,spring-integration,Spring Integration,我在下面的配置中尝试同时处理最多5个请求。 处理每个请求所需的时间大不相同。我注意到它开始处理5个任务,这很好,但当其中一个任务完成时,它不会立即接受另一个任务,事实上它正在等待所有5个任务完成,然后只开始接下来的5个任务。所以我得到了某种批处理行为。可能是我没有正确配置,请帮助更正此问题。我想在线程处理完一个任务后立即开始下一个任务 我可以增加队列容量,在这种情况下,它确实会启动下一个任务,但我只想在准备处理消息时调用入站消息提供程序,而不仅仅是将其保存在任务执行器队列中 <int:in
<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连接为
;命名空间不支持自定义策略
编辑:
已创建。但有一个小问题,它会轮询下一个任务,但会一直保持到踏板可用为止。在踏板可用后,是否可以让它轮询下一个任务?我有一个优先级队列,它正在轮询,所以我想在真正准备好执行时轮询;您可能可以使用自定义触发器执行某些操作,但我怀疑它是否能完全满足您的需要。但是,您可以在轮询器的
中添加建议,并且在执行器忙时不执行轮询。有关如何编写/配置建议,请参阅。