我想问一个关于处理 SUSPEND 状态的问题。
这是背景:
我正在使用 curator/zk 作为并发运行作业列表的任务协调器。每分钟,每个工作人员(每个工作都在单独的 VM 上运行)尝试通过调用从 zk 获取任务(锁):
lock = new InterProcessSemaphoreMutex(zkClient, task);
boolean hasLock = false;
hasLock = lock.acquire(1, TimeUnit.SECONDS);
如果工作获得锁,它将执行任务。
负责检索器锁/任务的类实现 ConnectionStateListener 接口。以下是当前的实现:
RECONNECT:什么都不做,因为无论 ZK 连接状态如何,worker 都会尝试获取锁。
LOST:释放锁,因为连接丢失。
暂停:??????
我的问题是关于 SUSPEND 状态,我应该在进入 SUSPEND 时释放锁(基本上,视为丢失)还是做其他事情?
处理 SUSPEND 状态的最佳实践是什么?
谢谢,