🧩 Exercícios: Arquitetura de Microsserviços com Spring Cloud
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:
- 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)
- Salve o arquivo como:
Atividade_17_1_SeuNome - 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:
- Habilitar
@EnableDiscoveryCliente 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)
- Salve o arquivo como:
Atividade_17_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_17_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_17_4_SeuNome - 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; }
}