Поиск конечных точек 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());
}