Поиск конечных точек AWS ElastiCache с помощью Java - PullRequest
6 голосов
/ 14 марта 2012

Я пытаюсь программно получить список конечных точек ElastiCache из моего Java-приложения, используя последний Java AWS SDK. Вещи, кажется, не работают - я могу найти действительный 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, и оба раза получаю одно и то же.

Есть идеи, что я могу делать не так?

1 Ответ

7 голосов
/ 14 марта 2012

Согласно ответу команды AWS на Невозможно получить узлы кэша из кластера ElastiCache , вам потребуется использовать необязательный флаг ShowDetails для получения информации о CacheNodes через класс DescribeCacheClustersRequest параметр метода descriptionCacheClusters () .Если присмотреться, нет флага ShowDetails , хотя, несмотря на то, что он действительно задокументирован для этого класса:

Необязательный флаг ShowDetails можно использовать для получения подробной информации о узлах кэша, связанных сКеш кластера.Подробности включают в себя адрес и порт DNS для конечной точки узла кэша.

Предположительно, это на самом деле нацелено на setShowCacheNodeInfo () , то есть Необязательный флаг, который может быть включен вЗапрос DescribeCacheCluster для получения информации об узлах кэша .

Таким образом, ответ команды AWS выглядит неточным и фактически не решает вопрос, почему метод getCacheNodes () из Class CacheCluster не возвращает эту информацию, что довольно необычно для таких сообщений.

В любом случае, вы можете просто попробовать метод getCacheNodes () из Class CacheCluster как возвращено методом getCacheClusters () из Класс DescribeCacheClustersResult вместо этого, мы надеемся, что он работает как объявлено (то есть я сам не пробовал).

Удачи!


Обновление

Вот код, который Сандер успешно использовал для достижения своей цели, подтверждая изложенный выше подход:

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());
}
...