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

时间:2017-12-29 10:05:27

标签: java concurrency redis

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

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

我将状态存储在Redis数据库中。 例如:

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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