2014-02-11 57 views
2

我一直在嘗試使用ElastiCache客戶端,但未在本地主機上安裝memcached服務器。生產中的webapp運行在AWS env中,但在開發過程中,我想使用與本地memcached服務器相同的ElastiCache客戶端jar。我現在正在使用spymemcached客戶端jar進行開發。對本地memcached服務器使用AWS ElastiCache客戶端

我想避免重新編譯與生產和開發不同罐子的應用程序。有沒有一種方法可以配置ElastiCache客戶端以供本地主機使用?

+0

我有同樣的事情努力,迅速來的結論是,答案是「沒有」 ...... –

回答

2

我剛剛一直在嘗試相同的事情,我想我的工作。看看Amazon's MemcachedClient的構造函數。您需要將clientMode設置爲ClientMode.Static以連接到普通的Memcached服務器或ClientMode.Dynamic以通過自動發現連接到ElastiCache。根據您使用的構造函數,您可以將clientMode設置爲static的ConnectionFactory傳入,或者可以傳入不包含「.cfg。」的地址。

我使用的是Spring,所以我創建了一個擴展MemcachedClientFactoryBean的類來設置connectionFactory上的clientMode。

<bean id="memcachedClient" class="au.com.mycompany.MyMemcachedClientFactoryBean"> 
    <property name="servers" value="${memcached.server}"/> 
    <property name="protocol" value="BINARY"/> 
    <property name="transcoder"> 
     <bean class="net.spy.memcached.transcoders.SerializingTranscoder"> 
     <property name="compressionThreshold" value="1024"/> 
     </bean> 
    </property> 
    <property name="opTimeout" value="1000"/> 
    <property name="timeoutExceptionThreshold" value="1998"/> 
    <property name="hashAlg"> 
     <value type="net.spy.memcached.DefaultHashAlgorithm">KETAMA_HASH</value> 
    </property> 
    <property name="locatorType" value="CONSISTENT"/> 
    <property name="failureMode" value="Redistribute"/> 
    <property name="useNagleAlgorithm" value="false"/> 
    </bean> 

這裏是我的FactoryBean

package au.com.mycompany; 

import net.spy.memcached.AddrUtil; 
import net.spy.memcached.ClientMode; 
import net.spy.memcached.ConnectionFactoryBuilder; 
import net.spy.memcached.MemcachedClient; 
import net.spy.memcached.spring.MemcachedClientFactoryBean; 

public class MyMemcachedClientFactoryBean extends MemcachedClientFactoryBean { 
    private final ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder(); 
    private String servers; 

    @Override 
    public Object getObject() throws Exception { 
     if (servers.contains("127.0.0.1")) { 
      connectionFactoryBuilder.setClientMode(ClientMode.Static); 
     } else { 
      connectionFactoryBuilder.setClientMode(ClientMode.Dynamic); 
     } 
     return new MemcachedClient(connectionFactoryBuilder.build(), AddrUtil.getAddresses(servers)); 
    } 

    @Override 
    public void setServers(final String newServers) { 
     this.servers = newServers; 
    } 
} 
+0

HTTPS://forums.aws.amazon的.com/thread.jspa?MESSAGEID = 445221 – ufk

相關問題