gpt4 book ai didi

java - Hazelcast 的分布式锁不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:29 24 4
gpt4 key购买 nike

我正在尝试测试我的分布式锁实现,但我仍然没有找到使其工作的方法。我用两个简单的方法部署了一个 REST 服务,如下所示:

@GET
@Path("/lock")
@Produces("text/*")
public String lock() throws InterruptedException {
Lock lock = distributedService.getDistributedLock("test");
boolean result = lock.tryLock(5, TimeUnit.SECONDS);
return result ? "locked" : "timeout";
}

@GET
@Path("/unlock")
@Produces("text/*")
public String unlock() {
Lock lock = distributedService.getDistributedLock("test");
lock.unlock();
return "unlocked";
}

distributedService 对象实现了 getDistributedLock() 方法:

@Override
public Lock getDistributedLock(String lockName) {
return Hazelcast.getDefaultInstance().getLock(lockName);
}

在 hazelcast.xml 文件中,我启用了 TCP-IP 连接并禁用了其他一切:

<network>
<port auto-increment="true">5701</port>
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<interface>192.168.0.01</interface>
<interface>192.168.0.02</interface>
</tcp-ip>
</join>
<interfaces enabled="false" />
<symmetric-encryption enabled="false" />
<asymmetric-encryption enabled="false" />

我在两台机器上部署了应用程序,IP 地址对应于 .xml 文件(192.168.0.01 和 192.168.0.02),当我从浏览器调用服务时它第一次工作(它锁定并返回“locked”),每次我调用 unlock() 方法时它都会正确返回(我得到字符串“unlocked”)但是在第一次之后,每次我调用 lock() 方法时我都会超时。它看起来不像是 unlock() 方法正在解锁它。

谁能告诉我在 hazelcast 中使用分布式锁的正确方法?

最佳答案

只有锁定的线程才能解锁。你是说你已经为锁定和解锁实现了 REST。而且我猜锁定和解锁的线程是不同的。这就是它不起作用的原因。尝试打印线程名称并查看您自己。

关于java - Hazelcast 的分布式锁不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com