Как определить, подключен ли сервер memcached? - PullRequest
0 голосов
/ 22 декабря 2019

Я использую net.spy.memcached.MemcachedClient, но я обнаружил, что мне было трудно определить, доступен ли целевой сервер memcached:

    System.out.println("connecting  memcached server: "+serverName + ":" + port);
    System.setProperty("net.spy.verifyAliveOnConnect", "true");
    InetSocketAddress address =  new InetSocketAddress(serverName, port);
    MemcachedClient mcc = new MemcachedClient(address);

    for (MemcachedNode node : mcc.getConnection().getLocator().getAll()) {
        if (!node.isActive()) {
            System.out.println("Failed to connect to Memcached server");
            mcc.shutdown();            
            throw new IOException("can't connect the server");
        }
    }

    System.out.println("Connection to server successfully");

Код работает правильно, когда он находится в режиме отладки. (шаг за шагом). Но всегда бросайте это IOException, даже если memcached сервер доступен, если он не находится в режиме отладки. Похоже, это асинхронное задание для установки активного состояния узла.

Я пытался установить свойства net.spy.verifyAliveOnConnect в строке 2, не помогает.

Также пробовал другой способ:

        ConnectionFactory factory = new ConnectionFactoryBuilder()
            .setDaemon(true)
            .build();
    List<InetSocketAddress> servers = AddrUtil.getAddresses(serverName + ":" + port);
    MemcachedClient mcc = new MemcachedClient(factory,servers);

Не помогает.

...