【问题标题】:Spring Batch or JMS for long running jobs用于长时间运行的作业的 Spring Batch 或 JMS
【发布时间】:2012-10-09 22:08:16
【问题描述】:

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

【问题讨论】:

    标签: spring jakarta-ee jms spring-batch


    【解决方案1】:

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

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

    【讨论】:

    • 但是如果这样的消息 bean 没有返回结果会发生什么,因为计算结果的进程被卡住了。这难道不是 EJB 也会出现的同样问题吗?您的应用程序中是否也存在这些问题?
    【解决方案2】:

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

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

    干杯,

    【讨论】:

    • 它不是数据库查询。该程序需要一个非常大的文件并从这个 Input 生成一个文件。
    • 我读到使用spring batch,可以使用资源管理。这将非常有帮助,因为我的应用程序服务器不知道产生的外部进程。你有关于如何在春季批次管理的任何信息吗?
    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多