6

我正在尝试使用最新的 Java AWS SDK 以编程方式从我的 Java 应用程序中获取 ElastiCache 端点列表。事情似乎没有奏效——我可以找到一个有效的 CacheCluster,但是当我列出它的节点时,它是空的。这是我的代码:

CacheCluster cc = it.next();

System.out.println("Cache node type: " + cc.getCacheNodeType());
System.out.println("Number cache nodes: " + cc.getNumCacheNodes());

List<CacheNode> listCache = cc.getCacheNodes();

System.out.println("List size: " + listCache.size());

当我运行它时,我得到以下输出:

Cache node type: cache.m1.small 
Number cache nodes: 1 
List size: 0

这看起来很简单,但似乎不起作用。我已经启动了一个带有单个节点的 ElastiCache 集群,但是当我调用 getCacheNodes() 时,该列表为空。我尝试在本地和 EC2 实例上运行此代码,两次都得到相同的结果。

关于我可能做错了什么的任何想法?

4

1 回答 1

8

根据 AWS 团队对无法从 ElastiCache 集群获取缓存节点的响应,您需要使用可选的 ShowDetails 标志通过方法describeCacheClusters()的Class DescribeCacheClustersRequest参数获取 CacheNodes 信息。仔细看,没有ShowDetails标志,尽管确实记录了这个类:

可选的 ShowDetails 标志可用于检索有关与缓存集群关联的缓存节点的详细信息。详细信息包括缓存节点端点的 DNS 地址和端口。

大概这实际上是针对setShowCacheNodeInfo()的,它是一个可选标志,可以包含在 DescribeCacheCluster 请求中以检索缓存节点信息

因此,AWS 团队的回应似乎不准确,实际上并没有解决这个问题,为什么Class CacheCluster中的方法getCacheNodes()没有返回该信息,这对于此类帖子来说都是非常不寻常的。

无论如何,您可能只是想尝试类 CacheCluster中的方法 getCacheNodes( ),而该方法由类DescribeCacheClustersResult中的方法getCacheClusters()返回,希望它可以像广告宣传的那样工作(即我自己没有尝试过)。

祝你好运!


更新

下面是 Sander 成功实现其目标的代码,证实了上述方法:

AmazonElastiCacheClient client = new AmazonElastiCacheClient(credentials);
DescribeCacheClustersRequest dccRequest = new DescribeCacheClustersRequest();
dccRequest.setShowCacheNodeInfo(true);

DescribeCacheClustersResult clusterResult = client.describeCacheClusters(dccRequest);

缺少的部分应该类似于他最初的解决方案,例如:

List<CacheCluster> cacheClusters = clusterResult.getCacheClusters();
for (CacheCluster cacheCluster : cacheClusters) {
    List<CacheNode> cacheNodes = cacheCluster.getCacheNodes();

    System.out.println("List size: " + cacheNodes.size());
}
于 2012-03-13T22:12:52.250 回答