1
resposta

[Dúvida] Comunicação entre microsserviços com Spring Cloud e Eureka – instância não encontrada

Olá, pessoal! Estou fazendo o curso de Microsserviços na prática com Spring Cloud e estou com um problema na comunicação entre dois microsserviços registrados no Eureka Server.

Tenho os serviços:

catalog-service

client-service

Ambos estão subindo normalmente e aparecem registrados no painel do Eureka. Porém, quando o client-service tenta se comunicar com o catalog-service usando o @LoadBalanced RestTemplate, estou recebendo o seguinte erro:

java.lang.IllegalStateException: No instances available for catalog-service

1 resposta

Olá, Ellen!

Esse erro:

java.lang.IllegalStateException: No instances available for catalog-service

significa que o client-service não está conseguindo encontrar o catalog-service no Eureka, mesmo que ele apareça no painel.

Nomes no Eureka devem bater

No código, certifique-se de que o nome do serviço está exatamente igual ao registrado no Eureka. Por exemplo:

restTemplate.getForObject("http://CATALOG-SERVICE/produtos", Produto[].class)

Os nomes no Eureka são case-sensitive e devem ser maiúsculos por padrão (Spring converte para upper case).

. @LoadBalanced está sendo usado corretamente?

Você precisa configurar o RestTemplate com @LoadBalanced, senão ele não resolve os nomes via Eureka.

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

. Espera do registro no Eureka

Às vezes o client-service tenta chamar o catalog-service antes que ele esteja 100% registrado no Eureka.

Solução:

  • Adicione um pequeno Thread.sleep no client-service (só para testes) ou
  • Use @Scheduled ou Retry para fazer novas tentativas

Portas e context path

Verifique se o catalog-service está rodando na porta correta e se há algum server.servlet.context-path que precisa ser incluído na URL.