我正在尝试用 Curator 进程间锁替换数据库悲观锁。使用数据库锁,我select for update
在事务开始时对实体进行锁定,并在事务提交时释放它。事务可以跨越多个方法,如果链中的任何方法尝试再次获取此锁,它会在同一事务/线程中运行时获取它。
现在有了 zookeeper 锁,我看到的例子是这样的:
InterProcessMutex lock = new InterProcessMutex(client, lockPath);
if ( lock.acquire(maxWait, waitUnit) )
{
try
{
// do some work inside of the critical section here
}
finally
{
lock.release();
}
}
如果我的服务调用跨越多个方法并且这些方法中的任何一个单独尝试获取此锁,这将产生问题。我不希望锁被传递,因为这些是独立的业务方法。如果我在同一个线程中运行,是否有一些服务/工厂实现可以返回同一个锁对象?