Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 17.1 — Comunicação Declarativa entre Serviços com Spring Cloud OpenFeign

Contexto: Comunicação Declarativa entre Serviços com Spring Cloud OpenFeign no contexto de Arquitetura de Microsserviços com Spring Cloud.

Requisitos de Execução:

  1. Criar interface @FeignClient(name = 'cliente-service', url = 'http://localhost:8081').

Resultado Esperado

Cliente HTTP declarativo OpenFeign configurado sem código boilerplate.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_1_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Arquitetura de Microsserviços com Spring Cloud
🔑 Gabarito de Código & Solução Comentada
// ClienteFeignClient.java
package com.empresa.api.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "cliente-service", url = "http://localhost:8081")
public interface ClienteFeignClient {
    @GetMapping("/api/v1/clientes/{id}")
    Object buscarClientePorId(@PathVariable("id") Long id);
}

🔍 Nível 2: Prática

Problema 17.2 — Service Discovery com Netflix Eureka / Consul

Contexto: Service Discovery com Netflix Eureka / Consul no contexto de Arquitetura de Microsserviços com Spring Cloud.

Requisitos de Execução:

  1. Habilitar @EnableDiscoveryClient e registrar o serviço dinamicamente no catálogo do cluster.

Resultado Esperado

Serviço registrado no Eureka Server com heartbeats periódicos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_2_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Arquitetura de Microsserviços com Spring Cloud
🔑 Gabarito de Código & Solução Comentada
// DiscoveryConfig.java
package com.empresa.api.config;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableDiscoveryClient
public class DiscoveryConfig {}

⚡ Nível 3: Integração

Problema 17.3 — Roteamento e Filtros no Spring Cloud Gateway

Contexto: Roteamento e Filtros no Spring Cloud Gateway no contexto de Arquitetura de Microsserviços com Spring Cloud.

Requisitos de Execução:

  1. Configurar rotas declarativas no Gateway com predicados de path e filtros de reescrita de URL.

Resultado Esperado

Gateway roteando requisições para microsserviços internos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_3_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Arquitetura de Microsserviços com Spring Cloud
🔑 Gabarito de Código & Solução Comentada
// GatewayConfig.java
package com.empresa.api.gateway;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("pedidos_route", r -> r.path("/pedidos/**").uri("lb://pedidos-service"))
            .build();
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 17.4 — Configuração Centralizada com Spring Cloud Config Server

Contexto: Configuração Centralizada com Spring Cloud Config Server no contexto de Arquitetura de Microsserviços com Spring Cloud.

Requisitos de Execução:

  1. Carregar propriedades em tempo de execução a partir de repositório Git com suporte a @RefreshScope.

Resultado Esperado

Configurações atualizadas dinamicamente sem reiniciar a aplicação.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_4_SeuNome
  2. Envie na tarefa: Atividade Cap 17 - Arquitetura de Microsserviços com Spring Cloud
🔑 Gabarito de Código & Solução Comentada
// DynamicConfigService.java
package com.empresa.api.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

@Service
@RefreshScope
public class DynamicConfigService {
    @Value("${taxa.juros:0.05}")
    private double taxaJuros;

    public double getTaxaJuros() { return taxaJuros; }
}