Java 无法使用Membase client lib for memcached连接到AWS ElastiCache群集
我在从EC2实例获取/设置ElastiCache群集时遇到问题。我收到-Java 无法使用Membase client lib for memcached连接到AWS ElastiCache群集,java,amazon-web-services,timeout,memcached,amazon-elasticache,Java,Amazon Web Services,Timeout,Memcached,Amazon Elasticache,我在从EC2实例获取/设置ElastiCache群集时遇到问题。我收到-严重错误:net.spy.memcached.OperationTimeoutException:超时等待值--错误 当我试图获取或设置一个值时。我在本地机器上使用了相同的代码(尽管与本地memcached服务器通信),一切正常。完整的stacktrace可在此处找到- 我首先看到,我至少可以得到集群中所有节点的IP地址,这样我就可以把它输入到我的membase客户端&我确实能够找到节点的IP地址。 我还确保我的所有EC2安
严重错误:net.spy.memcached.OperationTimeoutException:超时等待值--错误
当我试图获取或设置一个值时。我在本地机器上使用了相同的代码(尽管与本地memcached服务器通信),一切正常。完整的stacktrace可在此处找到-
我首先看到,我至少可以得到集群中所有节点的IP地址,这样我就可以把它输入到我的membase客户端&我确实能够找到节点的IP地址。
我还确保我的所有EC2安全组也被添加到默认的缓存集群安全组中
这方面的任何指示都将非常有用
更新
用于获取特定记录的代码段
公共字符串getCachedValue(字符串名称空间,字符串键){
字符串值=null;
试一试{
MemcachedClient客户端
=CacheConnectionUtil.ConnectToElasticacheMcachedServer();
//例外情况的起点。
返回(字符串)client.get(命名空间+“$”+哈希键(键));
}捕获(IOE异常){
e、 printStackTrace();
}
返回值;
}
用于连接ElastiCache服务器的代码段
private static MemcachedClient connecttoelasticachemcachedserver()
抛出IOException{
DescribeCacheClustersResult cacheClustersInfo=null;
descripbeCacheClustersRequestCacheClusterRequest
=新的DescripteBacheClustersRequest();
cacheClusterRequest.setShowCacheNodeInfo(true);
试一试{
cacheClustersInfo=AWSConnectionUtil
.getElastiCacheObject(空)
.describeCacheClusters(cacheClusterRequest);
}捕获(例外e){
e、 printStackTrace();
抛出新IOException(“无法连接到ElastiCache群集”,e);
}
如果(cacheClustersInfo==null){
抛出新IOException(“ElastiCache集群信息对象为null”);
}
List clusters=cacheClustersInfo.getCacheClusters();
if(clusters==null | | clusters.isEmpty()){
抛出新IOException(“没有可用的ElastiCache集群”);
}
List serverList=new ArrayList();
用于(缓存群集群集:群集){
if(集群!=null
&&AWS约束
.CACHE_CLUSTER_ID
.equalsIgnoreCase(cluster.getCacheClusterId()){
List nodes=cluster.getCacheNodes();
如果(节点!=null){
用于(缓存节点:节点){
如果(节点!=null){
端点=node.getEndpoint();
如果(端点!=null
&&endpoint.getAddress()!=null){
添加(endpoint.getAddress()
+ ":"
+getPort());
}
}
}
}
}
}
if(serverList.isEmpty()){
抛出新IOException(“没有可用于群集的缓存节点-”
+AWSConstants.CACHE\u CLUSTER\u ID);
}
返回新的MemcachedClient(AddrUtil.getAddresses(serverList));
}
使用Amazon生产的改进的ElastiCache群集客户端
根据文档,要下载ElastiCache群集客户端:
登录AWS管理控制台并在打开ElastiCache控制台
在ElastiCache控制台中,单击下载ElastiCache群集客户端
ElastiCache Cluster Client for Java的源代码位于。此库基于流行的SpymeCached客户端。ElastiCache群集客户端是根据Amazon软件许可证发布的。您可以根据自己的需要自由修改源代码;您甚至可以将代码合并到其他开源Memcached库中,或者合并到您自己的客户机代码中
目前的版本是1.0.1。我使用1.0版已经一年多没有任何问题了。你能发布你的代码吗?如果不了解您的操作,就无法诊断此问题。堆栈跟踪只是说操作花费的时间太长。@mikewied请查看更新的问题中的代码片段。谢谢。你的代码看起来很正确,没有任何东西向我跳出来。我只需再次检查地址/端口组合是否正确。如果是这样,请尝试从同一个位置远程登录到集群中的一台计算机,此代码正在运行,并检查您是否可以执行get。@mikewied是的,我实际上获取了stacktrace中抛出的ip地址,并使用它从我的一个ec2实例远程登录,我可以执行get,正确放置。您发现了什么问题吗?