私のEC2インスタンスからElastiCacheクラスタへの取得/設定に問題があります。私は得ています - SEVERE: net.spy.memcached.OperationTimeoutException: Timeout waiting for value
- エラー。memcachedのMembaseクライアントライブラリを使用してAWS ElastiCacheクラスタに接続できません
値を取得または設定しようとしています。ローカルのマシンで同じコードを使用しましたが(ローカルmemcachedサーバーと通信していますが)、すべて正常に動作します。 http://pastebin.com/tYcCJ6cj
私は最初に、クラスタのすべてのノードのIPアドレスを取得して、それを私のmembaseクライアントに送ることができます&私は確かに見つけることができますノードのIPアドレスを取り出します。 また、すべてのEC2セキュリティグループがデフォルトキャッシュクラスタセキュリティグループに追加されていることを確認しました。
これについてのあらゆる指針は非常に役に立ちます。特定のレコードを取得するために使用
UPDATE
コードスニペット。
public String getCachedValue(String namespace, String key) {
String value = null;
try {
MemcachedClient client
= CacheConnectionUtil.connectToElastiCacheMemcachedServer();
// Point of origin for the exception.
return (String) client.get(namespace + "$" + hashKey(key));
} catch (IOException e) {
e.printStackTrace();
}
return value;
}
コードがElastiCacheサーバ
private static MemcachedClient connectToElastiCacheMemcachedServer()
throws IOException {
DescribeCacheClustersResult cacheClustersInfo = null;
DescribeCacheClustersRequest cacheClusterRequest
= new DescribeCacheClustersRequest();
cacheClusterRequest.setShowCacheNodeInfo(true);
try {
cacheClustersInfo = AWSConnectionUtil
.getElastiCacheObject(null)
.describeCacheClusters(cacheClusterRequest);
} catch (Exception e) {
e.printStackTrace();
throw new IOException("Unable to connect to ElastiCache Cluster.", e);
}
if (cacheClustersInfo == null) {
throw new IOException("ElastiCache Cluster Info Object is null.");
}
List<CacheCluster> clusters = cacheClustersInfo.getCacheClusters();
if (clusters == null || clusters.isEmpty()) {
throw new IOException("No ElastiCache Clusters available.");
}
List<String> serverList = new ArrayList<String>();
for (CacheCluster cluster : clusters) {
if (cluster != null
&& AWSConstants
.CACHE_CLUSTER_ID
.equalsIgnoreCase(cluster.getCacheClusterId())) {
List<CacheNode> nodes = cluster.getCacheNodes();
if (nodes != null) {
for (CacheNode node : nodes) {
if (node != null) {
Endpoint endpoint = node.getEndpoint();
if (endpoint != null
&& endpoint.getAddress() != null) {
serverList.add(endpoint.getAddress()
+ ":"
+ endpoint.getPort());
}
}
}
}
}
}
if (serverList.isEmpty()) {
throw new IOException("No Cached nodes available for cluster - "
+ AWSConstants.CACHE_CLUSTER_ID);
}
return new MemcachedClient(AddrUtil.getAddresses(serverList));
}
コードを投稿できますか?あなたのやり方を見ずにこの問題を診断することはできません。スタックトレースは、操作が完了するまでに時間がかかりすぎたと言うだけです。 – mikewied
@mikewiedコードスニペットを持つ最新の質問をご覧ください。ありがとう。 – Chantz
あなたのコードが正しく表示され、私に飛び出すことはありません。私はちょうどアドレス/ポートの組み合わせが正しいことを確認します。その場合は、このコードが実行されている同じ場所からクラスター内のマシンの1つにtelnetで接続し、getを実行できるかどうかを確認してください。 – mikewied