java - 处理 "killed"Java作业的方法?

标签 java rest concurrency jobs

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

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

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

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

针对这种情况有更好的方法吗?

最佳答案

鉴于您已指定 REST,显然您有发出请求并需要结果的客户端。为什么不让客户自己承担确定是否已完成的责任。

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

通过这种方式,客户端可以了解他们需要什么(因为他们无论如何都必须这样做),并且你的服务器是无状态的,这更容易管理。

关于java - 处理 "killed"Java作业的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1813979/

相关文章:

java - 状态 404 – 在使用 RESTFul API 的 @post 注释上未找到

go - 在 Go 中使用 channel ,我创建了一个返回地址的阶乘函数

java - 不正确构造的对象是否只影响它在构造函数内发布的线程的可见性?

java - 当另一个线程正在使用映射时,重新分配对映射的引用会引发异常吗?

java.lang.RuntimeException : org. apache.nutch.plugin.PluginRuntimeException : java. 使用nutch解析时出现lang.ClassNotFoundException

java - restcontroller 和 application/x-www-form-urlencoded;charset=UTF-8 媒体类型的问题

node.js - 使用带有环回的非休息调用 (Strongloop)

java - ExecutorService 类型中的方法 invokeAll 不适用于参数错误

java - objectoutputstream 中 undefined object

sql-server - sp_getapplock 同步对内存表的并发访问