Поиск конечных точек AWS ElastiCache с помощью Java

Я пытаюсь программно получить список конечных точек 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 ответ

Решение

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

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

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

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

В любом случае, вы можете просто захотеть попробовать метод getCacheNodes() из класса 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());
}
Другие вопросы по тегам