【问题标题】:Finding AWS ElastiCache endpoints with Java使用 Java 查找 AWS ElastiCache 终端节点
【发布时间】:2012-03-30 06:45:15
【问题描述】:

我正在尝试使用最新的 Java AWS 开发工具包以编程方式从我的 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 实例上运行此代码,两次都得到相同的结果。

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

【问题讨论】:

  • 我也有同样的问题!!

标签: java amazon-web-services memcached amazon-elasticache


【解决方案1】:

根据 AWS 团队对 Not able to get cache nodes from ElastiCache cluster 的回复,您将需要使用可选的 ShowDetails 标志以通过方法 describeCacheClusters()Class DescribeCacheClustersRequest 参数获取 CacheNodes 信息。仔细看,没有 ShowDetails 标志,尽管确实记录了这个类:

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

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

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

无论如何,您可能只是想尝试 Class CacheCluster 中的 getCacheNodes() 方法,正如 Class 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());
}

【讨论】:

  • 您说得对。这是更新后的代码:code AmazonElastiCacheClient client = new AmazonElastiCacheClient(credentials); DescribeCacheClustersRequest dccRequest = new DescribeCacheClustersRequest(); dccRequest.setShowCacheNodeInfo(true); DescribeCacheClustersResult clusterResult = client.describeCacheClusters(dccRequest); code
  • @SanderSmith:感谢您跟进确认此方法的解决方案!我已经相应地更新了答案。
  • 天啊,这很奇怪,在尝试获取 .getCacheNodes() 时没有警告、错误或异常。亚马逊应该照顾它。
  • 以上代码返回 0 cacheCluster 即使我创建了 1。可能是什么问题?
  • @rohitkadam19 - 默认 AWS 区域可能会有所不同,具体取决于您使用的是管理控制台、CLI 还是 SDK。因此,当例如通过控制台手动创建某些东西(即您的 ElastiCache 集群)然后尝试以编程方式访问它时,很容易偶然发现这种不匹配 - 您是否检查过您在两种情况下都使用相同的区域?
猜你喜欢
  • 2022-04-29
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多