Integração de Serviços com OpenFeign e Balanceamento de Carga no Spring Cloud

Para demonstrar a integração, vamos criar dois projetos: um como provedor de serviços e outro como consumidor. Ambos usarão o Nacos para descoberta de serviços e o OpenFeign para chamadas remotas com balanceamento de carga.

Provedor de Serviços

Este é um serviço básico registrado no Nacos, expondo um endponit simples.

Dependências Maven no arquivo pom.xml:


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

Configuração no arquivo application.yml:


servidor:
  porta: 8081

primavera:
  aplicação:
    nome: servico-provedor
  nuvem:
    nacos:
      descoberta:
        endereço-servidor: localhost:8848

Código-fonte:


// Classe principal
@EnableDiscoveryClient
@SpringBootApplication
public class AplicacaoProvedor {
    public static void main(String[] args) {
        SpringApplication.run(AplicacaoProvedor.class, args);
    }
}

// Controlador REST
@RestController
public class SaudacaoControlador {

    @GetMapping("/api/saudacao")
    public String obterSaudacao() {
        return "Olá do provedor!";
    }
}

Consumidor de Serviços

O consumidor utiliza OpenFeign para chamar o provedor e LoadBalancer para distribuir a carga.

Dependências Maven:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

Configuração no arquivo application.yml:


servidor:
  porta: 8082

primavera:
  aplicação:
    nome: servico-consumidor
  nuvem:
    nacos:
      descoberta:
        endereço-servidor: localhost:8848

Código-fonte:


// Interface Feign para comunicação com o provedor
@FeignClient(name = "servico-provedor")
public interface ProvedorCliente {

    @GetMapping("/api/saudacao")
    String buscarSaudacao();
}

// Controlador que usa o cliente Feign
@RestController
public class ConsumidorControlador {

    @Autowired
    private ProvedorCliente provedorCliente;

    @GetMapping("/consumir")
    public String consumirServico() {
        return provedorCliente.buscarSaudacao();
    }
}

// Classe principal com anotações para Feign e descoberta
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class AplicacaoConsumidor {
    public static void main(String[] args) {
        SpringApplication.run(AplicacaoConsumidor.class, args);
    }
}

Ao iniciar ambos os serviços, eles serão visíveis no painel do Nacos. Teste a chamada acessando o endpoint /consumir no consumidor, que retornará a resposta do provedor.

Em ambientes de produção, é comum que um serviço atue tanto como provedor quanto consumidor. Uma prática recomendada é fazer o controlador implementar a interface Feign, o que permite herdar anotações como @RequestMapping e integrar facilmente com ferramentas como Swagger para documentação automática da API, mantendo o código mais coeso e legível.

Tags: spring-cloud OpenFeign Nacos load-balancing microservices

Publicado em 6-24 21:09