Tôi đang gặp vấn đề với get/set thành một cụm ElastiCache từ cá thể EC2 của tôi. Tôi đang nhận - SEVERE: net.spy.memcached.OperationTimeoutException: Timeout waiting for value
- lỗi.Không thể kết nối với các cụm AWS ElastiCache bằng cách sử dụng Membase của khách hàng Membase cho memcached
Khi tôi cố gắng lấy hoặc đặt giá trị. Tôi đã sử dụng cùng một mã trên máy cục bộ của mình (mặc dù giao tiếp với một máy chủ memcached cục bộ) và mọi thứ hoạt động tốt. Stacktrace hoàn toàn có thể được tìm thấy ở đây - http://pastebin.com/tYcCJ6cj
đầu tiên tôi thấy rằng tôi có thể ít nhất có được địa chỉ IP của tất cả các nút của một cụm để tôi có thể ăn nó vào client membase tôi & Tôi thực sự có thể tìm thấy ra địa chỉ ip nút. Tôi cũng đảm bảo rằng tất cả các nhóm bảo mật EC2 của tôi cũng được thêm vào nhóm bảo mật nhóm bộ nhớ cache mặc định.
Bất kỳ con trỏ nào về điều này sẽ hữu ích rất nhiều.
CẬP NHẬT
Đoạn mã sử dụng để lấy một kỷ lục đặc biệt.
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;
}
Đoạn mã dùng để kết nối đến máy chủ 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));
}
Bạn có thể đăng mã của mình không? Nó không thể để chẩn đoán vấn đề này mà không nhìn thấy những gì bạn đang làm. Theo dõi ngăn xếp chỉ cho biết hoạt động mất quá nhiều thời gian để hoàn thành. – mikewied
@mikewied vui lòng xem câu hỏi được cập nhật có đoạn mã. Cảm ơn. – Chantz
Mã của bạn xuất hiện đúng và không có gì nhảy ra ngoài với tôi. Tôi sẽ chỉ kiểm tra lại rằng sự kết hợp địa chỉ/cổng là chính xác. Nếu nó là sau đó cố gắng telnet đến một trong các máy trong bạn cụm từ cùng một vị trí mã này đang chạy và kiểm tra xem nếu bạn có thể làm một nhận được. – mikewied