Я использую 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);
Не помогает.