我有一个工作流程,我希望看起来像这样:
/ Worker 1 \ =Request Channel= -> [Holding Queue|||] -> Worker 2 -> =Response Channel= \ Worker 3 /
那是:
Response Channel
我知道Spring Integration中有QueueChannel
个,但这些通道需要轮询(这似乎不是最理想的)。特别是,如果工人忙碌,我希望工人忙碌。
另外,我考虑完全避开队列,只是简单地让任务循环到所有工作人员,但最好只有一条等待线,因为某些任务可能比其他任务更快完成。此外,我想了解剩余的工作数量(我可以从队列中获得)以及取消所有或特定工作的能力。
如何在避免轮询的同时实现此消息排队/工作分配模式?
编辑:看起来我正在寻找Message Dispatcher pattern - 如何使用Spring / Spring Integration实现这一点?
答案 0 :(得分:3)
在Spring Integration 2.0.0中,我们已将<dispatcher/>
子元素添加到<channel/>
元素中。您可以使用它来确保异步切换而不使用轮询器。
这下面使用了java.util.concurrent。
<channel id="shareableWork">
<dispatcher task-executor="pool"/>
</channel>
<thread-pool-task-executor id="pool" max-size="3"/>
答案 1 :(得分:2)
也许您应该从并发包中查看ExecutorService类。