我正在创建一些数据处理器。它有下一个API方法:创建一些任务,获得任务结果。
如果失败并且允许在多个实例中运行,则数据处理器应该恢复。 (DP1,DP2等)。
我将状态存储在Redis数据库中。 例如:
API创建任务(Runnable),将其放入scheduledThreadPoolExecutor,并每5秒运行一次,修改Redis状态。获得任务结果后,任务被取消,Redis状态被删除。
如果DataProcessor失败并重新启动,我从Redis数据库获取状态,重新创建任务,一切正常。
但是如果运行另一个DataProcessor实例,它也会从Redis获取状态,重新创建任务并运行它们,这不是首选,因为这些任务已经由另一个DataProcessor实例处理。
在失败的情况下,我甚至无法将此Redis状态标记为[不再处理],因为知道失败的实例是......好了,失败了,不能再做任何事了。 / p>
在这种情况下可以做些什么?
答案 0 :(得分:0)
找到“Redisson”库,它有分布式调度程序,正是我需要的。