2011-05-18 102 views
1

我想使用一些机制来做这样的事情 - 我有一个应用程序服务器获取处理订单的请求。一个请求可以有一个订单或两个订单。为了处理订单,应用程序需要打电话给外部供应商,供应商可以一次处理最多5个订单。我想创建一个组件,最多可以批量处理5个订单(如果可用),并向供应商发出一个请求,然后当我收到响应时,将响应重新分配给适当的请求。在第一个请求到达之前,组件会等待2秒钟,然后才发出批量请求。使用java排队和批量请求

我想过使用JMS,但在JMS中,消费者一旦到达并且消费者一次处理一条消息,就会处理消息(订单)。我正在考虑使用常规队列(ArrayBlockingQueue)并在使用ScheduledTimerTask进行触发前对订单进行批处理。有没有人有任何想法 - 预先感谢。

+0

您是否尝试实施此解决方案?你有没有遇到任何具体问题? – Olaf 2011-05-18 15:01:04

回答

1

你所描述的大部分可以用Apache Camel完成。它可以配置为调节,批量转发请求。

Aggregator做什么“为X的消息最长等待再往前要求”

+0

感谢您的回复。我从来没有使用Apache Camel,我听说这种ESB类型的解决方案很慢 - 你是否知道任何性能问题。你知道是否可以用Mule做同样的事情 - 他们正在考虑在我们公司使用Mule做其他事情。我想他们可能不想同时支持骆驼和骡。 – user759326 2011-05-18 23:03:14

+0

我从来没有听说有人说骆驼很慢,但听说你问这件事在这种情况下听起来有点奇怪。如果在发送请求之前等待一定数量的消息(在延迟的情况下,而不是吞吐量),则一切都将“慢” – Kaj 2011-05-19 06:14:01

0

没有什么使用JMS阻止你。只需对从队列中提取的操作设置超时时间,并且当您有5条消息或超时时间时,即可处理该批处理。

+0

如果我使用JMS,我认为每个消息都将由单独的消费者处理,具体取决于许多我配置。如果我在消费者中设置了超时,如果它没有收到第二条消息并且另一位消费者收到它,它会有什么帮助 – user759326 2011-05-18 16:46:22

+0

例如,查看http://static.springsource.org/spring/docs/中的jmsTemplate 3.1.0.M1/javadoc-api /让一些代码调用receive方法5次,收集某种集合中的消息,做一批,然后调用api – Buhb 2011-05-18 18:03:29