Caching 将SSMCache与AWS elasticache自动发现一起使用时出现“客户端未初始化”错误
我正在与AWS elasticache provider一起使用Spring缓存。我得到这个警告:Caching 将SSMCache与AWS elasticache自动发现一起使用时出现“客户端未初始化”错误,caching,amazon-web-services,amazon-elasticache,spring-cache,simple-spring-memcached,Caching,Amazon Web Services,Amazon Elasticache,Spring Cache,Simple Spring Memcached,我正在与AWS elasticache provider一起使用Spring缓存。我得到这个警告: WARN c.g.code.ssm.spring.SSMCache - An error has occurred for cache defaultCache and key java.lang.IllegalStateException: Client is not initialized at net.spy.memcached.MemcachedClient.checkStat
WARN c.g.code.ssm.spring.SSMCache - An error has occurred for cache defaultCache and key
java.lang.IllegalStateException: Client is not initialized
at net.spy.memcached.MemcachedClient.checkState(MemcachedClient.java:1623) ~[elasticache-java-cluster-client.jar:na]
at net.spy.memcached.MemcachedClient.enqueueOperation(MemcachedClient.java:1617) ~[elasticache-java-cluster-client.jar:na]
at net.spy.memcached.MemcachedClient.asyncGet(MemcachedClient.java:1013) ~[elasticache-java-cluster-client.jar:na]
at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1235) ~[elasticache-java-cluster-client.jar:na]
at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1256) ~[elasticache-java-cluster-client.jar:na]
at com.google.code.ssm.providers.elasticache.MemcacheClientWrapper.get(MemcacheClientWrapper.java:147) ~[aws-elasticache-provider.jar:na]
at com.google.code.ssm.CacheImpl.get(CacheImpl.java:271) ~[simple-spring-memcached.jar:na]
at com.google.code.ssm.CacheImpl.get(CacheImpl.java:106) ~[simple-spring-memcached.jar:na]
at com.google.code.ssm.spring.SSMCache.getValue(SSMCache.java:226) [spring-cache.jar:na]
at com.google.code.ssm.spring.SSMCache.get(SSMCache.java:100) [spring-cache.jar:na]
我使用的是相同的memcache,没有spring缓存,它工作得很好。我只有在使用spring缓存时才会出现此错误
我已验证安全组是否指定了入站端口,并且我正在EC2上运行代码
更新1:
添加我的配置-
<bean name="cacheManager" class="com.google.code.ssm.spring.SSMCacheManager">
<property name="caches">
<set>
<bean class="com.google.code.ssm.spring.SSMCache">
<constructor-arg name="cache" index="0" ref="defaultMemcachedClient" />
<!-- 5 minutes -->
<constructor-arg name="expiration" index="1" value="3600" />
<!-- @CacheEvict(..., "allEntries" = true) won't work because allowClear is false,
so we won't flush accidentally all entries from memcached instance -->
<constructor-arg name="allowClear" index="2" value="false" />
</bean>
</set>
</property>
</bean>
<bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
<property name="cacheName" value="defaultCache" />
<property name="cacheClientFactory">
<bean name="cacheClientFactory" class="com.google.code.ssm.providers.elasticache.MemcacheClientFactoryImpl" />
</property>
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="127.0.0.1:11211" />
</bean>
</property>
<property name="configuration">
<bean class="com.google.code.ssm.providers.elasticache.ElastiCacheConfiguration">
<property name="consistentHashing" value="true" />
<property name="clientMode" value="#{T(net.spy.memcached.ClientMode).Dynamic}" />
</bean>
</property>
</bean>
显示您的配置和用法
很明显,您没有定义defaultCache,也没有使用不带“value”参数集的Cacheable。我两者都做过。用我的配置更新了问题。我确实使用值参数。如果未设置value param,我会遇到不同的异常,说cachename未知。正如我们在SSM电子邮件组中讨论的,请确保DefaultAddressProvider使用了正确有效的配置。您发布的那个地址无效,因为它指向本地memcached,但应该指向AWS服务器。问题确实是它拾取的是默认地址提供程序,而不是我给出的AWS详细信息。解决了这个问题。谢谢