我有一个工作流程,我想看起来像这样:
/ 工人 1\ =Request Channel= -> [Holding Queue|||] -> Worker 2 -> =Response Channel= \ 工人 3 /
那是:
- 请求进来并进入 FIFO 队列
- 然后相同的工作人员从队列中提取任务
- 在任何给定时间,任何工人只能完成一项任务
- 当一个工作人员空闲并且持有队列非空时,工作人员应该立即拿起另一个任务
- 任务完成后,工作人员将结果放在
Response Channel
我知道 Spring Integration 中有QueueChannel
s,但是这些通道需要轮询(这似乎不是最理想的)。特别是,如果工人可以很忙,我希望工人很忙。
此外,我考虑过完全避免排队,只是让所有工作人员循环执行任务,但最好有一条等待线,因为某些任务可能比其他任务完成得更快。此外,我想了解剩余多少工作(我可以从队列中获得)以及取消所有或特定工作的能力。
如何在避免轮询的同时实现此消息队列/工作分配模式?
编辑:看来我正在寻找Message Dispatcher 模式——如何使用 Spring/Spring 集成来实现它?