1
resposta

[Bug] Erro ao confirmar pagamento

Estou fazendo a aula "Comunicação sincrona" do capitulo 6 - Integração entre Microserviços e estou com erro ao tentar processar a confirmação de pagamento.

Ao executar: PATCH http://localhost:8082/pagamentos-ms/pagamentos/1/confirmar

O erro é:

500 Internal Server Error
Erro: [404] during [PUT] to [http://pedidos-ms/pedidos/8/pago] [PedidoClient#atualizapagamento(Long)]: []

Não logou nenhum erro no console do pedidos-ms nem no pagamentos-ms, mas no pagamentos-ms logou essa mensagem que me chamou a atenção:

main] o.s.c.openfeign.FeignClientFactoryBean   : For 'pedidos-ms' URL not provided. Will try picking an instance via load-balancing.

No projeto pagamento-ms a minha interface PedidoClient

@FeignClient("pedidos-ms")
public interface PedidoClient {

    @RequestMapping(method = RequestMethod.PUT, value = "/pedidos/{id}/pago")
    void atualizaPagamento(@PathVariable Long id);

}
1 resposta

Esse erro acontece porque o Feign não sabe para onde mandar a requisição, já que a URL do pedidos-ms não está registrada.
O trecho do log confirma isso:

For 'pedidos-ms' URL not provided. Will try picking an instance via load-balancing.

Ou seja, você registrou o client com o nome "pedidos-ms", mas ele não consegue resolver para uma URL real.

O que pode ser:

  1. Falta de configuração do service discovery (Eureka, Consul, etc.)

    • Se você estiver seguindo o curso com Eureka, o pagamentos-ms precisa estar registrado no servidor Eureka e o pedidos-ms também.

    • Confirme se ambos os microsserviços estão com a anotação:

      @EnableDiscoveryClient
      

      e se o application.properties tem as configs para o Eureka.

  2. Chamada sem Eureka (definir URL manual)

    • Caso não esteja usando Eureka/Discovery, você precisa informar explicitamente a URL no Feign:

      @FeignClient(name = "pedidos-ms", url = "http://localhost:8081")
      public interface PedidoClient {
          @PutMapping("/pedidos/{id}/pago")
          void atualizaPagamento(@PathVariable Long id);
      }
      
    • Ajuste a porta (8081) para a mesma que o pedidos-ms está rodando.

  3. Path incorreto no Feign

    • Confirme se no pedidos-ms o endpoint realmente existe:

      PUT /pedidos/{id}/pago
      

      e se não há prefixos como /api no @RequestMapping do controller.