Java 有哪些方法可以分发异步批处理任务?

Java 有哪些方法可以分发异步批处理任务?,java,asynchronous,distributed,batch-processing,Java,Asynchronous,Distributed,Batch Processing,我目前正在调查现有哪些与Java兼容的解决方案,以满足以下需求: 基于计时器/可调度任务的批处理 分布式,并通过它提供水平扩展的能力 弹性,请不要SPF 这些任务的性质(繁重的XML生成,以及向基于web的接收节点的交付)意味着使用Quartz之类的工具在单个服务器上运行它们是不可行的 我听说过Hadoop和JavaSpaces等技术,它们有效地解决了问题的可伸缩性和恢复性问题。由于不知道这些技术是否非常适合我的需求,很难知道还有哪些技术适合我 我真的很想知道这个领域的人们觉得有哪些选择,以

我目前正在调查现有哪些与Java兼容的解决方案,以满足以下需求:

  • 基于计时器/可调度任务的批处理
  • 分布式,并通过它提供水平扩展的能力
  • 弹性,请不要SPF
这些任务的性质(繁重的XML生成,以及向基于web的接收节点的交付)意味着使用Quartz之类的工具在单个服务器上运行它们是不可行的

我听说过Hadoop和JavaSpaces等技术,它们有效地解决了问题的可伸缩性和恢复性问题。由于不知道这些技术是否非常适合我的需求,很难知道还有哪些技术适合我

我真的很想知道这个领域的人们觉得有哪些选择,以及每个人如何发挥自己的优势,或者比其他人更好地解决某些问题


注:值得注意的是,日程安排能力可能是我们目前做事方式的后遗症。是的,有些任务应该在特定时间完成。它还被用于在没有设定时间的指令时限制吞吐量。

异步总是让我想起JMS。将请求消息发送到队列;MessageListener被从池中拉出以处理它

这可以扩展,因为队列和侦听器可以位于远程服务器上。可以配置侦听器线程池的大小。对于不同的任务,可以使用不同的侦听器

更新:通过集群和负载平衡,可以避免单点故障

您可以使用ActiveMQ(开源)、JBOSS(可用的开源版本)或任何JavaEE应用程序服务器免费获得JMS,因此不需要考虑预算

而且没有锁定,因为您使用的是JMS,而且您使用的是Java

我建议使用Spring消息驱动的POJO。当然,社区版是开源的


如果这对你来说不合适,看看和。这两个版本可能都很有用,而且社区版是开源的。

您研究过吗?我很确定它不会解决调度问题,但是你可以扩展它,它就像“魔术”一样发生,要执行的代码被发送到一个节点,并在那里执行。当您没有要发送的数据库连接(或任何不可序列化的连接)时,它可以正常工作。

我过去使用过JMS,虽然它很适合异步,但我没有使用过任何不容易成为单点故障的连接。当然,我毫不怀疑商业供应商提供了可分发、弹性MQ集群的重金属版本。。不要有这样的预算,也不要对供应商锁定感兴趣。我有点想远离大型商业框架,首选开源。ActiveMQ和RabbitMQ是两种流行的开源队列,它们支持集群,因此,如果承载队列的服务器出现故障,您就不会感到厌烦。和。两者都有Java客户端API。