Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用Membase client lib for memcached连接到AWS ElastiCache群集_Java_Amazon Web Services_Timeout_Memcached_Amazon Elasticache - Fatal编程技术网

Java 无法使用Membase client lib for memcached连接到AWS 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安

我在从EC2实例获取/设置ElastiCache群集时遇到问题。我收到-
严重错误: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,正确放置。您发现了什么问题吗?