3
respostas

Config Server - o.s.cloud.commons.util.InetUtils : Cannot determine local hostname

Quando tenho o Config-Server, externalizando as configs para o GitHub. O retorno que tenho é esse no log do Config Server: o.s.cloud.commons.util.InetUtils : Cannot determine local hostnameSegue o link: https://github.com/luisgustavoullmann/floricultura-config-server/blob/master/fornecedor/fornecedor.properties

application.properties do Config-Server

server.port=8888

#Buscando dentro de um repositorio do Github
spring.cloud.config.server.git.uri=https://github.com/luisgustavoullmann/floricultura-config-server
spring.cloud.config.server.git.uri.search-paths=fornecedor

bootstraop.properties do fornecedor

spring.application.name='fornecedor'
#Acessando CONFIG-SERVER
spring.profiles.active=default
#Qual port roda o CONFIG-SERVER
spring.cloud.config.uri=http://localhost:8888

application.properties do Fornecedor

# Port
server.port=8082

# Eureka
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

Retorno no endpointo no Postman:

{
    "name": "fornecedor",
    "profiles": [
        "default"
    ],
    "label": null,
    "version": "29a3f2fb784ee7356f5052ce3da242502d547d32",
    "state": null,
    "propertySources": []
}

Quando tento consultar as instâncias do fornecedor na loja

@Service
public class CompraService {

    //Discovery Client para ver quais instancias estão disponíveis no Eureka
    @Autowired //DiscoveryClient do SpringFramework.Cloud
    private DiscoveryClient eurekaClient;

    @Autowired
    private RestTemplate restTemplate;

    public void realizaCompra(CompraDto compra) {
        //null depois do GET, pois não envia informação nenhuma
        //loja POST pedido, para fornecedor do endereco do cliente
        ResponseEntity<InfoFornecedorDto> exchage =
                restTemplate.exchange("http://fornecedor/info/" + compra.getEndereco().getEstado(), //endereco do cliente
                HttpMethod.GET, null, InfoFornecedorDto.class);

        eurekaClient.getInstances("fornecedor").stream()
                .forEach(fornecedor -> {
                    System.out.println("localhost:"+fornecedor.getPort()); //imprime o localhost de todos os fornecedores disponíveis
                });

        System.out.println(exchage.getBody().getEndereco());
    }
}

Esse é o retorno que tenho: java.lang.IllegalStateException: No instances available for fornecedor

Ou seja, não acha propertySources. O código está todo no Github se precisar ver.

O Eureka reconhece o microserviço:

c.n.e.registry.AbstractInstanceRegistry  : Registered instance 'FORNECEDOR'/localhost:'fornecedor':8082 with status UP (replication=false)

Também reconhece a loja

Registered instance 'LOJA'/localhost:'loja':8081 with status UP (replication=false)

Porém, quando faço um POST no Postman com: http://localhost:8081/compra Body:

{
    "itens":[
        {
            "id":1,
            "quantidade":5
        }
    ],
    "endereco":{
        "rua":"Rua da Maria",
        "numero":123,
        "estado":"SP"
    }
}

Tenho como retorno:

{
    "timestamp": "2020-06-27T14:14:43.974+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "No instances available for fornecedor",
    "path": "/compra"
}
java.lang.IllegalStateException: No instances available for fornecedor

Alguém poderia me ajudar a solucionar essa questão?

3 respostas

O Eureka reconhece o microserviço:

c.n.e.registry.AbstractInstanceRegistry  : Registered instance 'FORNECEDOR'/localhost:'fornecedor':8082 with status UP (replication=false)

Também reconhece a loja

Registered instance 'LOJA'/localhost:'loja':8081 with status UP (replication=false)

Porém, quando faço um POST no Postman com: http://localhost:8081/compra Body:

{
    "itens":[
        {
            "id":1,
            "quantidade":5
        }
    ],
    "endereco":{
        "rua":"Rua da Maria",
        "numero":123,
        "estado":"SP"
    }
}

Tenho como retorno:

{
    "timestamp": "2020-06-27T14:14:43.974+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "No instances available for fornecedor",
    "path": "/compra"
}

Alguém poderia me ajudar a solucionar essa questão?

Fiz algumas alterações e percebi que o problema está quando o Config Server tenta buscar as configs no repositório do Github. Se coloco localmente ele funciona.

Esse é o código para acesso do Config Server ao repositório do Github

#Buscando dentro de um repositorio do Github
spring.cloud.config.server.git.uri=https://github.com/luisgustavoullmann/floricultura-config-server
spring.cloud.config.server.git.search-paths=fornecedor

Vou seguir usando localmente, até achar a resposta.

Mas a pergunta que fica é, porque não funciona?

O post foi fechado por inatividade. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software