Spring Batch或JMS用于长时间运行的作业

时间:2012-10-19 09:57:41

标签: spring java-ee jms spring-batch

我遇到的问题是我必须在Webservice上运行很长时间的运行进程,现在我正在寻找一种处理结果的好方法。场景:用户通过UI执行这样一个长时间运行的过程。现在他得到了他的请求被接受的消息,并且他应该稍后返回。因此,没有必要向他显示他的请求或类似的状态。我只是想找到一种方法来正确处理长时间运行的过程。由于进程是外部程序,我的应用程序服务器不知道它们。因此,我必须等待这些程序终止。当然我不想为此使用EJB,因为它们会阻塞没有结果的时间。相反,我想到了使用JMS或Spring Batch。有没有人遇到过相同的问题或建议解决方案会更好?

2 个答案:

答案 0 :(得分:0)

这实际上取决于您的外部程序可用的通信形式。 JMS是一种非常好的方法,可立即在您的应用服务器中使用,但如果您的外部程序是一个长时间运行的数据库查询,将结果转储到文本文件中,则可能不是最佳选择...

Spring Batch优于“仅”使用JMS作为异步通信通道的主要优点是事务属性,允许基础结构重试失败的作业,将作业组合在一起等等。如果不了解您的具体设置,很难给出详细的建议。

干杯,

答案 1 :(得分:0)

我有类似的设计要求,用户发送XML文件,我不得不从他们生成文件。在这种情况下使用JMS是有利的,因为您始终可以添加这些进程的新实例,这些实例可以并行使用和执行作业。

您可以使用计时器任务来检查状态或监控这些进程。此外,您可以在完成这些过程后将消息发布到JMS队列。