Pergunta

Estou tentando obter programaticamente uma lista de endpoints do ElastiCache do meu aplicativo Java usando o Java AWS SDK mais recente.As coisas não parecem estar funcionando - posso encontrar um CacheCluster válido, mas quando listo seus nós, ele está vazio.Aqui está meu código:

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

Quando executo, obtenho a seguinte saída:

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

Isso parece tão simples, mas não parece funcionar.Iniciei um cluster do ElastiCache com um único nó, mas a lista aparece vazia quando chamo getCacheNodes().Tentei executar esse código localmente e em uma instância do EC2, e obtive a mesma coisa nas duas vezes.

Alguma idéia do que eu poderia estar fazendo de errado?

Foi útil?

Solução

De acordo com a resposta da equipe da AWS a Não é possível obter nós de cache do cluster do ElastiCache você vai precisa usar o sinalizador ShowDetails opcional para obter informações de CacheNodes através do Classe DescribeCacheClustersRequest parâmetro do método descreverCacheClusters().Olhando mais de perto não há Mostrar detalhes flag, apesar de estar documentado para esta classe:

Um sinalizador opcional ShowDetails pode ser usado para recuperar informações detalhadas sobre os nós de cache associados ao cluster de cache.Os detalhes incluem o endereço DNS e a porta do endpoint do nó de cache.

Presumivelmente, isso realmente visa setShowCacheNodeInfo(), qual é Um sinalizador opcional que pode ser incluído na solicitação DescribeCacheCluster para recuperar informações de nós de cache.

Portanto, a resposta da equipe da AWS parece imprecisa e na verdade não aborda a questão: por que o método getCacheNodes() de ClasseCacheCluster não está retornando essas informações, sendo ambos bastante incomuns para tais postagens.

De qualquer forma, você pode simplesmente tentar o método getCacheNodes() de ClasseCacheCluster conforme retornado pelo método getCacheClusters() de Classe DescribeCacheClustersResult em vez disso, espero que funcione conforme anunciado (ou seja,Eu não tentei isso sozinho).

Boa sorte!


Atualizar

Aqui está o código que Sander usou com sucesso para atingir seu objetivo, confirmando a abordagem descrita acima:

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

DescribeCacheClustersResult clusterResult = client.describeCacheClusters(dccRequest);

As peças que faltam devem ser semelhantes à sua solução inicial, por exemplo:

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

    System.out.println("List size: " + cacheNodes.size());
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top