【发布时间】:2015-08-27 18:51:31
【问题描述】:
我有一个包含订单的数据库,每个订单都有截止日期和创建日期。我想将最多 4 个订单拉入路由并同时处理它们。每个订单可能需要 10-20 分钟来处理。但我希望尽可能多地保持所有线程运行,而不是停机。
这是我现在拥有的:
from("timer://GetOrder?fixedRate=true&period=1s")
.to("bean:orderInfoDao?method=getNextOrder")
.to("jms://process-orders")
.end();
from("jms://process-orders?concurrentConsumers=4")
.to("bean:orderService?method=processOrder(${body})")
.to("direct:send-result")
.end();
getNextOrder DAO 函数按创建日期返回最旧的订单,该订单已超过到期日。收到的订单会立即尝试。
现在的问题是,由于计时器,传入的订单在 JMS 路由中堆积,当 getNextOrder 返回一个更旧的订单时,它在队列中远远落后。
任何想法我可以如何构建这些路由,以便为最旧的 4 个订单轮询数据库并同时执行这些订单?可以接受对 DAO 的更改。
有没有多线程生产者?
提前感谢您的建议!
【问题讨论】:
标签: java multithreading apache-camel producer