Java:防止在多个实例上创建相同的任务

问题描述 投票:0回答:1

我正在创建一些数据处理器。它有下一个API方法:创建一些任务,获取任务结果。

如果失败并且允许在多个实例中运行,则数据处理器应该恢复。 (DP1,DP2等)。

我将状态存储在Redis db中。例如:

API创建任务(Runnable),将其放入scheduledThreadPoolExecutor,并每5秒运行一次,修改Redis状态。获取任务结果后,任务将被取消,Redis状态将被删除。

如果DataProcessor失败并重新启动,我从Redis数据库获取状态,重新创建任务,一切正常。

但是如果运行另一个DataProcessor实例,它也会从Redis获取状态,重新创建任务并运行它们,这不是首选,因为这些任务已经由另一个DataProcessor实例处理。

在失败的情况下,我甚至不能将此Redis状态标记为[不再处理],因为知道失败的实例是......好吧,失败了,不能再做任何事了。

在这种情况下可以做些什么?

java concurrency redis
1个回答
0
投票

找到“Redisson”库,它有分布式调度程序,正是我需要的。

© www.soinside.com 2019 - 2024. All rights reserved.