用于Web服务中长时间运行过程的Java模式

问题描述:

我正在构建一个执行数据库进程的Web服务(运行多个查询的SQL代码,然后在两个真正大的表之间移动数据),我假设一些进程可能需要2到10个小时才能执行。用于Web服务中长时间运行过程的Java模式

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

在此先感谢!

它必须是异步的。

由于您的Web服务调用是RPC,所以最好让实现验证请求,将其放在队列中进行处理,并立即发回包含令牌或URL的响应以检查进度。

设置一个JMS队列并注册一个侦听器,将消息从队列中取出并保存。

如果这真的需要2-10个小时,我建议您查看您的模式和查询,看看您是否可以加快速度。有一个索引失踪了,我敢打赌。

+0

谢谢!我现在正在学习ActiveMQ来实现这一点。还有一个问题,这是我使用pub/sub(主题)还是队列的情况?在这种情况下每个人有什么优点和缺点? – wsb3383 2010-08-12 03:12:36

+0

@duffymo:任何想法如何使用令牌或URL来检查进度? – Diluu 2014-03-21 03:49:11

+0

你可以轮询(“完成?现在怎么回合?”)或使用事件和回调。 – duffymo 2014-03-21 09:10:55

我在哪里工作,目前我正在评估针对这种确切情况的不同策略,只有时间不同。

随着您所处的时代,您可能会更好地使用发布/订阅消息队列(ActiveMQ)。

+0

谢谢你,为什么你认为pub/sub是排队的首选方法? – wsb3383 2010-08-13 00:38:56

+0

这个问题真的属于“我们如何使这个Web服务在服务器上异步”。对于它有一些解决方案(Metro WS堆栈有一些支持),但在我看到的那些解决方案中,他们实际上并不是那么友好。 Pub/Sub消息队列是为这种情况而建立的,正如俗话所说:“使用正确的工具来完成这项工作。”可悲的是,对于我的工作项目,我们选择不使用Pub/Sub消息队列。 – 2010-08-13 17:59:15