Je rencontre des problèmes avec get/set sur un cluster ElastiCache à partir de mon instance EC2. Je reçois - SEVERE: net.spy.memcached.OperationTimeoutException: Timeout waiting for value
- erreur.Impossible de se connecter aux clusters AWS ElastiCache à l'aide du client client Membase pour memcached
Lorsque j'essaie d'obtenir ou de définir une valeur. J'ai utilisé le même code sur ma machine locale (bien que je communique avec un serveur memcached local) et tout fonctionne correctement. Vous trouverez la stacktrace complète ici - http://pastebin.com/tYcCJ6cj
j'ai vu que je peux au moins obtenir l'adresse IP de tous les nœuds d'un cluster afin que je puisse le nourrir à mon client membase & Je suis vraiment en mesure de trouver sur les adresses IP du nœud. J'ai également veillé à ce que tous mes groupes de sécurité EC2 soient également ajoutés au groupe de sécurité du cluster de cache par défaut.
Tout pointeur sur ce point sera grandement utile.
MISE À JOUR
extrait de code utilisé pour chercher un enregistrement particulier.
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;
}
extrait de code utilisé pour se connecter au serveur 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));
}
Pouvez-vous poster votre code? Il n'est pas possible de diagnostiquer ce problème sans voir ce que vous faites. La trace de pile indique simplement que l'opération a duré trop longtemps. – mikewied
@mikewied veuillez voir la question mise à jour ayant l'extrait de code. Merci. – Chantz
Votre code semble correct et il n'y a rien qui me saute aux yeux. Je voudrais juste vérifier que la combinaison adresse/port est correcte. Si c'est le cas, essayez de vous connecter à l'une des machines de votre cluster depuis le même endroit que ce code et vérifiez si vous pouvez faire un get. – mikewied