2009-11-28 44 views
0

我们的服务器Web应用程序将处理REST API请求所请求的作业。处理“死亡”Java作业的方法?

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

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

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

这种情况下是否有更好的方法?

回答

1

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

例如客户发出请求。如果得到的结果,一切都很好。但是,如果客户端检测到服务器已完成(通过HTTP连接上的提前断开连接),则可以退出并稍后重试。如果你愿意,你可以实现各种重试策略(例如,在不同的主机上重试,在'n'重试后放弃等等)。

通过这种方式,客户维护他们需要什么(因为他们必须这样做,无论如何,大概),你的服务器是无状态的,这是一个更容易管理知识。

+0

同意这样更容易管理。去试试这个.. – 2009-11-29 20:27:46

1

我想用Quartz(它具有故障转移功能)来管理你的工作。

PS:我宁愿是错误的,但看了你最后的问题,我有你正在构建的东西过于复杂或概念错误的感觉。有太多的建筑气味恕我直言。