Laboratório 04

Objetivos

  • Implementando clientes REST com Netflix Feign

Tarefas

Implemente clientes REST com Feign

  • Utilize os projetos definidos no exercício anterior
  • Adicione a dependência spring-cloud-starter-feign nos projetos do aluno-service e disciplina-service
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-feign</artifactId>
  </dependency>
  • Ative a configuração do Feign utilizando a anotação @EnableFeignClients nas aplicações
  @EnableFeignClients
  @SpringBootApplication
  public class Application {
      public static void main(String[] args) {
          SpringApplication.run(Application.class, args);
      }
  }
  • Implemente uma Feign interface para recuperar as disciplinas no projeto do aluno-service
  @FeignClient("disciplina-service")
  public interface DisciplinaClient {

      @RequestMapping(value = "/disciplinas", method = RequestMethod.GET)
      Resources<DisciplinaDTO> getAllDisciplinas();

      @RequestMapping(value = "/disciplinas/{id}/dto", method = RequestMethod.GET)
      DisciplinaDTO getDisciplina(@PathVariable("id") Long id);
  }
  • Refatore o REST endpoint para retornar o AlunoDTO com as disciplinas utilizando o client Feign definido
  • Implemente uma interface Feign para recuperar os alunos no projeto disciplina-service
  @FeignClient("aluno-service")
  public interface AlunoClient {

      @RequestMapping(value = "/alunos", method = RequestMethod.GET)
      Resources<AlunoDTO> getAllAlunos();

      @RequestMapping(value = "/alunos/{id}/dto", method = RequestMethod.GET)
      AlunoDTO getAluno(@PathVariable("id") Long id);
  }
  • Refatore o REST endpoint para retornar a DisciplinaDTO com os alunos utilizando o client Feign definido
  • Execute e teste a aplicação

Customize as configurações do Feign na aplicação

  • Utilize os projetos definidos anteriormente
  • Defina uma classe de customização de configurações Feign FeignConfiguration
  @Configuration
  public class FeignConfiguration {  
      // ...
  }
  • Configure um nível de log FULL como padrão para os Feign clients
  @Bean
  Logger.Level feignLoggerLevel() {
      return Logger.Level.FULL;
  }
  • Habilite também um nível de log específico somente para o client Feign DisciplinaClient
logging:
  level:
    cloud.aluno.DisciplinaClient: DEBUG
  • Configure um novo comportamento para timeout de conexões das requisições
  int FIVE_SECONDS = 5000; // milliseconds
  @Bean
  public Request.Options options() {
      return new Request.Options(FIVE_SECONDS, FIVE_SECONDS);
  }
  • Habilite também a compressão da requisição e resposta à ser realizada
feign:
  compression:
    request:
      enabled: true
    response:
      enabled: true  
  • Execute e teste a aplicação