java—调度具有特定延迟且由多个节点运行的任务

ma8fv8wu  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(328)

我有一个调度,当我调用api时,它会在60秒后运行。现在的场景是在我调用api之后,如果我的服务器宕机,那么这个调度任务将不会执行。所以我想从服务器启动时它离开的同一点上取它。或者第二种情况是,如果一个节点停机,那么第二个节点应该执行调度任务。我怎样才能做到这一点?
任何建议都会很有帮助。
提前谢谢

@PostMapping("/books")
private int saveBook(@RequestBody Books books) {
    System.out.println("Before " + new Date().toString());
    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
    scheduledThreadPool.schedule(new Runnable() {
        public void run() {
            System.out.println("After " + new Date().toString());
        }
    }, 60, TimeUnit.SECONDS);
    System.out.println("M out");
    return books.getBookid();
}
fjnneemd

fjnneemd1#

实现这一点的一般方法是使用异步介质(如队列)。
您将需要完成的任务发送到队列,并让另一个组件侦听并执行该任务。
一种不太标准的方法是将任务存储在数据库中,有特定的组件扫描数据库,获取任务,标记任务正在处理,执行任务。在某个超时之后,其他节点可以拾取处理任务并重新执行它

相关问题