Распределенная блокировка с Hazelcast не работает

Я пытаюсь протестировать свою реализацию распределенной блокировки, но до сих пор не нашел способа заставить ее работать. Я развернул службу 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" />

I deployed the application in the two machines, with IP adresses corresponding to the .xml file (192.168.0.01 and 192.168.0.02) and when I call the service from the browser It works for the first time (it locks and returns "locked") and everytime I call the unlock() method it returns correctly (I get the string "unlocked") but after the first time, everytime that I call the lock() method I get a timeout. It doesn't look like the unlock() method is unlocking it.

Может ли кто-нибудь указать мне правильный способ использования распределенной блокировки с hazelcast?


person Daniel Duarte Figueiredo    schedule 02.05.2012    source источник


Ответы (1)


Только заблокированный поток может разблокировать его. Вы говорите, что реализовали REST для блокировки и разблокировки. И я предполагаю, что нить блокировки и разблокировки разные. Вот почему это не работает. Попробуйте напечатать название темы и убедитесь сами.

person Fuad Malikov    schedule 02.05.2012
comment
Да, это правильно. Я улучшил свои методы тестирования, и потоки стали другими. Спасибо. - person Daniel Duarte Figueiredo; 03.05.2012