Skip to content

Latest commit

 

History

History
60 lines (44 loc) · 6.86 KB

File metadata and controls

60 lines (44 loc) · 6.86 KB

Floricultura microservices parent

Microserviços de uma floricultura feitos utilizando Spring Cloud, implementando um Autorization Server, API Gateway, Service Registry, Load Balancer, Tracing Distribuído e um Circuit Breaker.


Microservices

  • AUTH-SERVER: atua como um servidor de autorização OAuth2.
  • ZULL-GATEWAY: atua como API Gateway.
  • EUREKA-SERVER: atua como serviço de registro das nossas aplicações;
  • LOJA: realiza a compra se comunicando com os demais serviços. Banco de dados único;
  • FORNECDOR: CRUD produtos, CRUD pedidos, CRUD fornecedores. Banco de dados único;
  • TRANSPORTADOR: realiza a entrega. Banco de dados único;

Authorization Server - Oauth2


API Gateway - Zuul

  • Para habilitar o projeto como API Gateway, é necessário importar o starter netflix-zuul, adicionar a anotação @EnableZuulProxy e as propriedades do eureka server para recuperar todas as aplicações registradas e fazer o proxy.
  • Compartilhamos os headers de autorização que são recebidos nas requisições em application.yml.

Service Registry - Spring Eureka

  • Para habilitar o projeto como Service Registry, é necessário importar o starter netflix-eureka-server e adicionar a anotação @EnableEurekaServer.

  • Eureka Client nos permite registrar um client(loja e fornecedor) no Eureka adicionando as propriedades referentes ao seu registro em seu application.yml.


Load Balancer(Client Side) - Ribbon

  • Ribbon: lib do SpringCloud de Client Side Load Balancing onde o cliente decidirá qual instância do serviço receberá a requisição. RestTemplate e FeignClient possuem suporte.

  • RestTemplate: podemos resolver o nome dos host dos clientes registrados no Eureka com a anotação @LoadBalancer o que habilita, também, o C.S. Load Balancing nas requisições.

  • FeignClient: permite consumir as aplicações registradas no Eureka com Load Balancer. Deve-se adicionar @EnableFeignClients na classe main e criar interfaces(example) com os métodos e anotações que mapearão as requisições.

  • Para replicar dados de autenticação das requisições recebidas, criamos um RequestInterceptor e copiamos o token para o header da requisição realizada pelo Feign.


Tracing distribuído - Spring Sleuth

  • Spring Sleuth: criará um Trace ID que identificará a transação na comunicação entre os serviços. Para mostrá-los nos logs, basta modificar os patterns de logback.xml onde for desejado. Exemplo:
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(${LOG_LEVEL_PATTERN}) %clr(${PID:-}){magenta} [%thread] %clr(%logger{39}){cyan} - %msg%n</pattern>
  • Papertrail: permite centralizar logs informando suas propriedades de conexão em logback.xml.

Circuit Breaker(Client Side) - Hystrix

  • Hystrixs: utilizaremos @EnableCircuitBreaker para habilitá-lo na app e @HystrixCommand nos métodos para que a lib o gerencie e aplique suas funcionalidades. O Hystrix passará a gerenciar as threads.
    • Um fallback pode ser definido para um método que será chamado quando o Circuit Breaker ocorrer: @HystrixCommand(fallbackMethod="realizaCompraFallback").
    • Se houver muitas falhas, o Hystrix possui inteligencia de chamar o fallback por padrão durante um tempo.
    • Bulkhead: para evitar que, ao haver uma sobrecarga de chamadas para uma operação, outra operação fique sem threads disponíveis, criaremos um pool de thread separado para cada metodo: @HystrixCommand(threadPoolKey="key").
    • Configuramos shareSecurityContext: true para compartilhar o contexto de seguraça entre as threads gerenciadas pelo Hystrix.