我想问一个关于处理SUSPEND状态的问题。
以下是背景资料:
我使用curator / zk作为并发运行作业列表的任务协调器。 对于每一分钟,每个工作人员(每个工作在一个单独的VM上运行)尝试通过调用从zk获取任务(锁定):
lock = new InterProcessSemaphoreMutex(zkClient, task);
boolean hasLock = false;
hasLock = lock.acquire(1, TimeUnit.SECONDS);
如果工作得到锁定,它将完成任务。
负责检索器锁/任务实现ConnectionStateListener接口的类。以下是目前的实施:
RECONNECT :什么也不做,因为工作人员会尝试获取锁定 无论ZK连接状态如何。
LOST :释放锁定,因为连接丢失。
暂停:??????
我的问题是关于SUSPEND状态,我是否应该在进入SUSPEND时释放锁定(基本上,视为丢失)或做其他事情?
处理SUSPEND状态的最佳做法是什么?
谢谢,
答案 0 :(得分:2)
我猜你已经在page的末尾看到了评论。
强烈建议您添加ConnectionStateListener和 注意SUSPENDED和LOST状态的变化。 如果是SUSPENDED状态 报道你不能确定你仍然持有锁,除非你 随后收到RECONNECTED状态。如果报告了丢失状态 可以肯定你不再持有锁。
我将此解释为:除非您的连接是RECONNECTED
并且锁已被释放,否则您将保持锁定直至收到LOST
状态。