代码之家  ›  专栏  ›  技术社区  ›  Marcus Leon

处理“死”Java作业的方法?

  •  0
  • Marcus Leon  · 技术社区  · 15 年前

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

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

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

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

    有没有更好的方法来处理这种情况?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Brian Agnew    15 年前

    考虑到您已经指定了REST,显然您的客户机可以发出请求并要求结果。为什么不把决定是否完成的责任放在 客户本身 .

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

    这样,客户机就可以维护他们所需要的知识(因为他们无论如何都必须这样做),而您的服务器是无状态的,这更容易管理。

        2
  •  1
  •   Pascal Thivent    15 年前

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

    附言:我宁愿是错的,但是,读过你最后的问题后,我觉得你在构建一些过于复杂或概念上错误的东西。建筑的气味太多了。