java:与批处理服务器通信的最佳技术是什么?

时间:2008-10-23 09:41:38

标签: java standards communication

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

5 个答案:

答案 0 :(得分:3)

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

从Sun(或IBM或Microsoft)购买高端JMS实现有许多优点。首先,您可以获得支持文件系统的可靠消息队列。没有消息可以丢失。其次,您将获得一些监控和管理工具。

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

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

答案 1 :(得分:2)

消息传递是最好的选择之一。

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

希望它有所帮助。

答案 4 :(得分:0)

我们将JMS与Web服务结合使用:

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