web服务中长时间运行流程的Java模式

web服务中长时间运行流程的Java模式,java,Java,我正在构建一个执行数据库进程的web服务(运行几个查询的SQL代码,然后在两个非常大的表之间移动数据),我假设一些进程可能需要2到10个小时才能执行 在JavaWeb服务中执行长时间运行的数据库进程的最佳实践是什么(它实际上是使用JAX-RS和Spring基于REST的)?该进程将在1次web服务调用时执行。预计每周执行一次 提前谢谢 它必须是异步的 由于您的web服务调用是RPC,最好让实现验证请求,将其置于队列中进行处理,并立即发送回具有令牌或URL的响应以检查进度 设置JMS队列并注册一个

我正在构建一个执行数据库进程的web服务(运行几个查询的SQL代码,然后在两个非常大的表之间移动数据),我假设一些进程可能需要2到10个小时才能执行

在JavaWeb服务中执行长时间运行的数据库进程的最佳实践是什么(它实际上是使用JAX-RS和Spring基于REST的)?该进程将在1次web服务调用时执行。预计每周执行一次


提前谢谢

它必须是异步的

由于您的web服务调用是RPC,最好让实现验证请求,将其置于队列中进行处理,并立即发送回具有令牌或URL的响应以检查进度

设置JMS队列并注册一个侦听器,该侦听器将消息从队列中移除并持久化


如果这真的需要2-10个小时,我建议查看您的模式和查询,看看是否可以加快速度。我敢打赌,某个地方缺少一个指数。

在我工作的地方,我目前正在评估针对这种情况的不同策略,只是时间不同


随着时间的推移,使用发布/订阅消息队列()可能会为您提供更好的服务。

谢谢!我正在学习ActiveMQ来实现这一点。还有一个问题,在这种情况下,我会使用发布/订阅(主题)还是队列?在这种情况下,每种方法的优缺点是什么?@duffymo:你知道如何使用令牌或URL来检查进度吗?你可以投票(“完成?现在怎么样?”)或使用事件和回调。谢谢,为什么你认为发布/订阅是优于排队的首选方法?问题真的在于“我们如何使这个web服务在服务器上异步。”有一些解决方案(Metro WS stack提供了一些支持),但是,在我所看到的这些解决方案中,它们的方法并不是那么友好。发布/订阅消息队列是为这种情况而构建的,正如俗话所说,“使用正确的工具完成任务”。“遗憾的是,对于我的工作项目,我们选择了不使用发布/订阅消息队列。