【问题标题】:java: what are the best techniques for communicating with a batch server?java:与批处理服务器通信的最佳技术是什么?
【发布时间】:2008-10-23 09:41:38
【问题描述】:

我有一个 WEB 应用程序(带有纯 Java servlet),它有一些繁重的计算工作,具有数据库访问权限,可以在异步模式下完成。 我计划使用专用服务器来执行此类批处理作业,我想知道使用哪些工具/技术/协议来在 WEB 服务器中的 servlet 和新专用服务器中的批处理作业之间进行通信。 我在看JMS。这是正确的选择吗? 有行业标准和/或广泛采用的技术吗? 我还需要同时处理多个作业的队列和优先级处理。

【问题讨论】:

    标签: java standards communication


    【解决方案1】:

    JMS 是一个非常标准的解决方案。高端平台(例如 Sun 的 JCAPS)大量使用 JMS 来划分和管理 Web 服务的工作负载。

    从 Sun(或 IBM 或 Microsoft)购买高端 JMS 实现有很多优势。首先,您会得到诸如支持文件系统的可靠消息队列之类的东西。任何消息都不会丢失。其次,您可以获得一些监控和管理工具。

    一个很酷的事情是拥有一个具有(可能)多个订阅者的 JMS 队列来进行工作负载平衡。

    另一个很酷的事情是让 JMS 主题具有日志记录过程以及订阅的实际工作过程。日志记录过程会提取消息并简单地记录作业启动和停止的基本阶段。

    【讨论】:

      【解决方案2】:

      消息是最好的选择之一。

      使消息传递框架非常通用,以便它可以处理任何类型的批处理作业。

      一种方法是拥有一个事件/任务管理器,您可以在其中将一个事件放在队列中,然后队列使用者处理该事件并将其转换为一组任务。然后可以由单独的任务处理程序执行任务。任务还可以生成更多事件,这些事件可以再次放入队列以提供反馈循环。通过这种方式,您可以将类似工作流的功能添加到框架中,并允许您的批处理作业相互依赖。

      【讨论】:

        【解决方案3】:

        JMS 将是从 servlet 发送批处理作业的合适解决方案。但它可能不是批处理服务器与 servlet 通信的最佳解决方案,因为它不能成为消息的侦听器。

        由于我不知道从批处理服务器到 servlet 的通信应该包含什么内容,我只能说您可能可以使用几个选项(是的,JMS 就是其中之一)。但是它们基本上都依赖于对 servlet 的轮询调用,然后它将以某种方式检查批处理服务器是否有任何东西在等待。这可能只是批处理服务器上的一个 servlet 或对 JMS 响应队列进行接收调用。其他解决方案是可用的,但关键是它不是异步的,除非您能够通过 AJAX 之类的方式从批处理服务器一直推送到客户端(我猜是浏览器)。

        无论如何,请记住一些事情。

        【讨论】:

          【解决方案4】:

          异步处理的另一个替代方法是让 Web 应用程序将请求存储在数据库中,并让批处理轮询数据库以处理新的批处理作业。由于您的应用程序看起来更小(纯 Java Servlet),这可能是一个更简单且成本更低的解决方案。

          希望对你有帮助。

          【讨论】:

          • 这就是“使用数据库构建 JMS”的解决方案。它可以工作。但是......它可能会变成一个性能问题,因为它不是一个简单的消息队列。
          【解决方案5】:

          我们将 JMS 与 Web 服务一起使用:

          1. 客户端通过 Web 服务请求计算
          2. 服务器写入 JMS 消息,并创建一个 ID 值,该值与状态(最初为“待处理”)一起存储在数据库中。服务器将 id 返回给客户端。
          3. 服务器(可以是单独的服务器)读取 JMS 消息,进行计算,完成后将数据库中的状态更新为“已完成”
          4. 当计算正在进行时,客户端正在轮询服务器以确定使用另一个 Web 服务(连同 id)的状态。服务器返回从数据库中检索到的状态。服务器计算完成后,客户端会看到“Completed”状态并知道计算完成。

          【讨论】:

            猜你喜欢
            • 2011-12-23
            • 2010-09-06
            • 2018-04-12
            • 2016-10-14
            • 1970-01-01
            • 2016-09-04
            • 1970-01-01
            • 1970-01-01
            • 2012-05-19
            相关资源
            最近更新 更多