【问题标题】:queueing and batching requests using java使用java对请求进行排队和批处理
【发布时间】:2011-08-28 03:18:17
【问题描述】:

我想使用某种机制来做这样的事情 - 我有一个应用程序服务器获取处理订单的请求。一个请求可以有一个订单或两个订单。要处理应用程序需要调用外部供应商的订单,供应商一次最多可以处理 5 个订单。我想创建一个组件,如果可用,最多可以批处理 5 个订单并向供应商发出一个请求,然后当我收到响应时,将响应重新分配给适当的请求。在第一个请求到达之前,该组件会等待 2 秒,然后再触发批处理请求。

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

【问题讨论】:

  • 您是否尝试实施此解决方案?您是否遇到任何具体问题?

标签: java queue jms


【解决方案1】:

您描述的大部分内容都可以通过Apache Camel 完成。它可以配置为限制、批处理和转发请求。

Aggregator 做了什么“最大等待 X 条消息然后转发请求”

【讨论】:

  • 感谢您的回复。我从未使用过 Apache Camel,我听说这种 ESB 类型的解决方案很慢 - 你知道任何性能问题吗?您知道是否可以使用 Mule 完成同样的事情 - 他们正在考虑在我们公司使用 Mule 来做其他事情。我想他们可能不想同时支持 Camel 和 Mule。
  • 我从来没有听过有人说 Camel 很慢,但是在这种情况下听到你这样问听起来有点奇怪。如果您在发送请求之前等待一定数量的消息,一切都会“缓慢”(在延迟而不是吞吐量的情况下)
【解决方案2】:

没有什么能阻止您使用 JMS。只需对从队列中获取的操作设置超时,当您有 5 条消息或超时时,您就可以处理批处理。

【讨论】:

  • 如果我使用 JMS,我认为每条消息将由一个单独的消费者处理,具体取决于我配置的数量。如果我在消费者中设置了超时,如果它没有收到第二条消息而另一个消费者收到了它会有什么帮助
  • 比如看看static.springsource.org/spring/docs/3.1.0.M1/javadoc-api中的jmsTemplate 有一些代码调用了5次receive方法,把消息收集到某种集合中,做一批,然后调用api
猜你喜欢
  • 2011-06-14
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
相关资源
最近更新 更多