我一直在嘗試使用ElastiCache客戶端,但未在本地主機上安裝memcached服務器。生產中的webapp運行在AWS env中,但在開發過程中,我想使用與本地memcached服務器相同的ElastiCache客戶端jar。我現在正在使用spymemcached客戶端jar進行開發。對本地memcached服務器使用AWS ElastiCache客戶端
我想避免重新編譯與生產和開發不同罐子的應用程序。有沒有一種方法可以配置ElastiCache客戶端以供本地主機使用?
我一直在嘗試使用ElastiCache客戶端,但未在本地主機上安裝memcached服務器。生產中的webapp運行在AWS env中,但在開發過程中,我想使用與本地memcached服務器相同的ElastiCache客戶端jar。我現在正在使用spymemcached客戶端jar進行開發。對本地memcached服務器使用AWS ElastiCache客戶端
我想避免重新編譯與生產和開發不同罐子的應用程序。有沒有一種方法可以配置ElastiCache客戶端以供本地主機使用?
我剛剛一直在嘗試相同的事情,我想我的工作。看看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;
}
}
HTTPS://forums.aws.amazon的.com/thread.jspa?MESSAGEID = 445221 – ufk
我有同樣的事情努力,迅速來的結論是,答案是「沒有」 ...... –