java - 如何在 hazelcast 3.x 中显示所有结构名称

标签 java hazelcast

我找到了a similar question ,但这是 2 年前的事情,对于以前的版本,在 hz 3.x 中不起作用。所以,我的问题是如何在 hz 3.x 中实现这一点?

比如APP1开锁1,APP2开锁2,如何才能知道所有已经被占用的锁?

最佳答案

找到了一种有很多技巧的方法,适用于任何服务

先运行 svr,然后运行 ​​cli 并测试。

public class PlayHZ
{
    @Test
    public void test() throws ExecutionException, InterruptedException
    {
        HazelcastInstance hz = Hazelcast.newHazelcastInstance();
        IExecutorService executor = hz.getExecutorService("gather");
        Map<Member, Future<List<String>>> futures = executor.submitToAllMembers(new LockNameGather());
        Thread.sleep(1000);
        System.out.println("Found in member");
        for (Map.Entry<Member, Future<List<String>>> entry : futures.entrySet())
        {
            System.out.printf("%s -> %s\n", entry.getKey(), entry.getValue().get());
        }
    }

    @Test
    public void svr() throws InterruptedException
    {
        HazelcastInstance hz = Hazelcast.newHazelcastInstance();
        Thread.sleep(Integer.MAX_VALUE);
    }

    @Test
    public void cli() throws InterruptedException
    {
        HazelcastInstance hz = Hazelcast.newHazelcastInstance();
        for (int i = 0; i < 100; i++)
        {
            ILock lock = hz.getLock("LOCK" + i);
            lock.lock();
        }
        Thread.sleep(Integer.MAX_VALUE);
    }

    private static class LockNameGather implements Callable<List<String>>, HazelcastInstanceAware, Serializable
    {
        transient HazelcastInstance hz;
        transient NodeEngineImpl node;

        @Override
        public List<String> call() throws Exception
        {
            node = ((HazelcastInstanceImpl) hz).node.getNodeEngine();
            LockService svc = node.getService(LockService.SERVICE_NAME);

            return svc.getAllLocks()
                      .stream()
                      .map(LockResource::getKey)
                      .map(d -> node.getSerializationService().createObjectDataInput(d))
                      .map((r) -> {
                          try
                          {
                              return r.readUTF();
                          } catch (IOException e)
                          {
                              throw new RuntimeException(e);
                          }
                      }).collect(Collectors.toList());
        }

        @Override
        public void setHazelcastInstance(HazelcastInstance hazelcastInstance)
        {
            hz = hazelcastInstance;
        }
    }
}

关于java - 如何在 hazelcast 3.x 中显示所有结构名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933744/

相关文章:

java - 在 SpringBoot 应用程序中下载时 Azure BlobNotFound

java - Spring Boot 应用程序中的 Hazelcast 客户端测试

docker - Vert.x 高可用性不起作用

java - "Mobile agent"或 "Thread migration"中哪一个在集群环境中性能效率更高?

java - 查看hibernate二级缓存数据的UI工具

java - 对于客户端/服务器拓扑来说,锁仍然是故障安全的吗?

java - 在 jhipster java 中使用 JDL 更改数据库结构

java - 如何在 session 事件 Onclose/onDestroy 中运行方法?

java - Oozie Hive 日志丢失

java - yml 中的 KeyStore 配置