Tengo problemas para obtener/establecer un clúster de ElastiCache desde mi instancia de EC2. Estoy recibiendo - SEVERE: net.spy.memcached.OperationTimeoutException: Timeout waiting for value
- error.No se puede conectar a los clústeres de AWS ElastiCache con el cliente de Membase lib para memcached
Cuando intento obtener o establecer un valor. Usé el mismo código en mi máquina local (aunque comunicándome con un servidor de memcached local) y todo funciona bien. El StackTrace completa se puede encontrar aquí - http://pastebin.com/tYcCJ6cj
vi por primera vez que puedo, al menos, obtener la dirección IP de todos los nodos de un clúster de modo que pueda darle de comer a mi cliente membase & verdad soy capaz de encontrar las direcciones IP del nodo. También me aseguré de que todos mis grupos de seguridad EC2 también se agreguen al grupo de seguridad del clúster de caché predeterminado.
Cualquier sugerencia sobre esto será de gran ayuda.
ACTUALIZACIÓN
fragmento de código utiliza para buscar un registro en particular.
public String getCachedValue(String namespace, String key) {
String value = null;
try {
MemcachedClient client
= CacheConnectionUtil.connectToElastiCacheMemcachedServer();
// Point of origin for the exception.
return (String) client.get(namespace + "$" + hashKey(key));
} catch (IOException e) {
e.printStackTrace();
}
return value;
}
fragmento de código utiliza para conectarse al servidor ElastiCache
private static MemcachedClient connectToElastiCacheMemcachedServer()
throws IOException {
DescribeCacheClustersResult cacheClustersInfo = null;
DescribeCacheClustersRequest cacheClusterRequest
= new DescribeCacheClustersRequest();
cacheClusterRequest.setShowCacheNodeInfo(true);
try {
cacheClustersInfo = AWSConnectionUtil
.getElastiCacheObject(null)
.describeCacheClusters(cacheClusterRequest);
} catch (Exception e) {
e.printStackTrace();
throw new IOException("Unable to connect to ElastiCache Cluster.", e);
}
if (cacheClustersInfo == null) {
throw new IOException("ElastiCache Cluster Info Object is null.");
}
List<CacheCluster> clusters = cacheClustersInfo.getCacheClusters();
if (clusters == null || clusters.isEmpty()) {
throw new IOException("No ElastiCache Clusters available.");
}
List<String> serverList = new ArrayList<String>();
for (CacheCluster cluster : clusters) {
if (cluster != null
&& AWSConstants
.CACHE_CLUSTER_ID
.equalsIgnoreCase(cluster.getCacheClusterId())) {
List<CacheNode> nodes = cluster.getCacheNodes();
if (nodes != null) {
for (CacheNode node : nodes) {
if (node != null) {
Endpoint endpoint = node.getEndpoint();
if (endpoint != null
&& endpoint.getAddress() != null) {
serverList.add(endpoint.getAddress()
+ ":"
+ endpoint.getPort());
}
}
}
}
}
}
if (serverList.isEmpty()) {
throw new IOException("No Cached nodes available for cluster - "
+ AWSConstants.CACHE_CLUSTER_ID);
}
return new MemcachedClient(AddrUtil.getAddresses(serverList));
}
¿Puedes publicar tu código? No es posible diagnosticar este problema sin ver lo que estás haciendo. El seguimiento de la pila solo dice que la operación tomó demasiado tiempo para completarse. – mikewied
@mikewied, vea la pregunta actualizada que tiene un fragmento de código. Gracias. – Chantz
Su código aparece correcto y no hay nada que salte hacia mí. Solo verificaría que la combinación de dirección/puerto sea correcta. Si es así, intente hacer telnet a una de las máquinas de su clúster desde el mismo lugar donde se está ejecutando este código y verifique si puede hacer una obtención. – mikewied