2015-04-07 2 views
1

J'essaie d'utiliser elasticache en tant que service memcache avec la bibliothèque client élastique d'AWS pour Java.Comment utilisez-vous le hachage cohérent avec les librairies java elasticache?

Le code suivant fonctionne pour la connexion au cluster:

_client = new MemcachedClient(_serverList); 

Mais toute tentative que j'ai fait d'utiliser les résultats de hashage cohérent dans le client memcache ne pas initialiser:

_client = new MemcachedClient(new KetamaConnectionFactory(), _serverList); 

ou

ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder(); 
connectionFactoryBuilder.setLocatorType(Locator.CONSISTENT); 
connectionFactoryBuilder.setHashAlg(DefaultHashAlgorithm.KETAMA_HASH); 
connectionFactoryBuilder.setClientMode(ClientMode.Dynamic); 
ConnectionFactory connectionFactory = connectionFactoryBuilder.build(); 
_client = new MemcachedClient(connectionFactory, _serverList); 

Toute tentative que j'ai faite pour utiliser autre chose qu'un MemcacheClient vanille ts dans des erreurs telles que:

2015-04-07 07: 00: 32,914 WARN net.spy.memcached.ConfigurationPoller: La configuration est nulle dans le serveur localhost 07/04/2015 07: 00: 32,914 WARN net.spy.memcached.ConfigurationPoller: Nombre d'erreurs de Poller consécutives est 7. Nombre de minutes depuis le dernier scrutin réussi est 0

de plus, je l'ai vérifié avec telnet, libs spymecached, et le constructeur de MemcacheClient vanille , que les groupes de sécurité sont permissifs.

Répondre

0

Vous devrez utiliser la méthode AddrUtil.getAddresses().

_client = new MemcachedClient(new KetamaConnectionFactory(), AddrUtil.getAddresses("configEndpoint:port")); 

ou

ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder(new KetamaConnectionFactory()); 
// set any other properties you want on the builder 
ConnectionFactory connectionFactory = connectionFactoryBuilder.build(); 
_client = new MemcachedClient(connectionFactory, AddrUtil.getAddresses("configEndpoint:port")); 
+0

J'aurais dû inclure le type pour _serverList, List , qui est la même chose que AddrUtils retourne. – tedwards

1

Lorsque vous utilisez les paramètres par défaut Bibliothèque AWS client KetamaConnectionFactory au mode client "dynamique" qui tente de rechercher la liste des nœuds memcached disponibles à partir du point de terminaison de configuration. Pour que cela fonctionne, votre _serverList ne doit contenir que le point de terminaison de configuration.

Votre message d'erreur indique que l'hôte était un noeud memcached "simple" qui ne comprend pas les extensions ElastiCache. Si c'est ce que vous avez l'intention de faire (spécifiez les nœuds vous-même plutôt que d'utiliser la fonction de découverte automatique), vous devez utiliser le constructeur KetamaConnectionFactory à plusieurs arguments et transmettre le ClientMode.Static comme premier argument.