0

我们的服务器 Web 应用程序将处理 REST API 请求所请求的作业。

理想情况下,如果服务器在作业期间死机(即:拔掉插头),作业应该在启动时恢复或重新启动。

处理这些作业的一种非常方便的方法是在一个单独的线程中使用 Java 5 中的一些并发实用程序类。唯一的问题是,如果出现故障,您需要写下作业详细信息并创建一个读取这些详细信息的进程在启动并恢复工作。这似乎很痛苦。

另一种方法是使用用户发出请求的队列,我们​​写入队列,然后从队列中读取并执行作业,并且仅在作业完成时删除消息。这使得在启动时恢复作业变得容易,因为服务器将在启动时从队列中读取并恢复进程。

有没有更好的方法来解决这种情况?

4

2 回答 2

1

我会使用Quartz(具有故障转移功能)来管理您的工作。

PS:我宁愿犯错,但是在阅读了您的最后一个问题后,我感觉您正在构建一些过于复杂或概念上错误的东西。恕我直言,建筑的味道太多了。

于 2009-11-28T22:46:30.550 回答
1

鉴于您已指定 REST,显然您有发出请求并要求结果的客户端。为什么不把确定他们是否已经完成的责任放在客户自己身上

例如,客户提出请求。如果它得到一个结果,一切都很好。但是,如果客户端检测到服务器已经完成(通过 HTTP 连接上的过早断开连接),那么它可以退出并稍后重试。如果您愿意,您可以实施各种重试策略(例如,在不同的主机上重试、在“n”次重试后放弃等)。

这样,客户就可以了解他们需要什么(大概他们必须这样做),并且您的服务器是无状态的,这更容易管理。

于 2009-11-29T11:29:12.273 回答