2015-04-07 60 views
1

我試圖使用elasticache作爲memcache服務,使用AWS的針對java的elasticache客戶端庫。你如何使用java elasticache庫一致哈希?

下面的代碼適用於連接到羣集:

_client = new MemcachedClient(_serverList); 

但我所做的任何企圖利用內存緩存中的客戶端沒有一致性哈希結果初始化:

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

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); 

我使用任何東西,除了香草MemcacheClient resul

2015年4月7日07:00:在錯誤,如TS 32.914 WARN net.spy.memcached.ConfigurationPoller:配置爲空在服務器本地主機 2015年4月7日07:00:32.914 WARN net.spy.memcached.ConfigurationPoller:連續輪詢的錯誤數爲7分鐘數自上次成功輪詢是0

另外,我通過telnet,spymecached庫和香草MemcacheClient構造驗證,安全團體是寬容的。

回答

0

您將需要使用AddrUtil.getAddresses()方法。

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

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

我應該包含_serverList,List 類型,這與AddrUtils返回的是相同的東西。 – tedwards

1

當使用AWS客戶端庫KetamaConnectionFactory默認爲它試圖輪詢從配置端點可用分佈式緩存節點的列表中的「動態」客戶端模式。爲此,您的_serverList應該只包含配置端點。

您的錯誤消息表明主機是一個「普通」的memcached節點,它不理解ElastiCache擴展。如果這是您打算執行的操作(您自己指定節點而不是使用自動發現功能),那麼您需要使用多參數KetamaConnectionFactory構造函數並將第一個參數傳入ClientMode.Static