Arquitetura de MicroServices com Spring Cloud e Spring Boot — Parte 5
Sumário
- Introdução
- Implementando o Config Server.
- Subindo um Eureka Server e conectando-o ao Config Server.
- Construindo um Servidor de Autorização OAuth2.
- Implementando Serviço de Pedidos.
Microserviço de Pedido
Olá pessoal, enfim voltamos com nossas publicações. Dando continuação a nossa sequencia de stories sobre microservice, nessa storie vamos criar nosso microserviço de pedido, que será responsável por criar, listar e apagar um pedido criado. Veremos também como integrar esse microserviço ao servidor de autorização criado na storie anterior, então bora lá.
Gerando o Projeto
Acesse o site do Spring Initializr e preencha as configurações como na imagem. Escolhemos qual vai ser o gerenciador de dependências (Maven), a linguagem de programação (Java), as dependências necessárias para o projeto (Cloud OAuth2, Actuator, Config Client e Eureka Discovery, JPA, MySql, web)e configuramos os metadados do Maven. Por fim geramos o projeto clicando em Generate Project, Ctrl + Enter ou Command + Enter. (Atenção para a versão do Spring, estamos usando a 1.5 nesse projeto)
Vamos descompactar o projeto na pasta delivery, assim como fizemos antes.
Implementando a aplicação
Como sempre fazemos, iremos abrir o pom.xml
e ver as dependências geradas, a maioria já conhecemos, mas vou frizar uma:
- spring-cloud-starter-oauth2: Colocamos novamente essa dependência e iremos coloca-la novamente em projetos futuros, pois ela será necessária para implementarmos a conexão com o authorization server.
Vamos criar os arquivos de configuração, neles serão definidas algumas propriedades importantes que serão utilizadas na nossa aplicação. Vamos começar criando nosso bootstrap.yml,
salve esse arquivo em delivery-order-service/src/main/resouces.
Como vimos na parte 3, nossa aplicação terá que buscar as configurações no Config Server, para isso especificamos novamente a propriedade spring.cloud.config.uri
. Após criado nosso bootstrap.yml
vamos criar nosso arquivo de configuração no repositório que o Config Server está usando tal, como vimos na parte 2, crie delivery-order-service.yml
com:
Vamos repassar algumas configurações que são novidades para nós até o momento:
- authserver.hostname: Parametro apenas para ser reutilizado em userInfoUri.
- security.oauth2.resource.userInfoUri: Url que o spring irá utilizar para validadar o token recebido na requisição.
Agora temos 4 arquivos no repositório de configuração contando com o arquivo de exemplo:
Considerando que você já esteja com o projeto aberto na sua IDE favorita, vamos criar a seguinte estrutura de pacotes com as seguintes classes:
Agora vamos implementar cada classe e ver seu conteúdo.
Order
Entidade que representará nosso pedido, iremos utilizar as anotações @NotEmpty
e @NotNull
na classe OrderService
para validar as propriedades do nosso pedido.
OrderRepository
Essa interface será responsável por fazer a “ponte” entre nossa camada de negócio e o banco de dados, podemos ver que ela está estendendo a Interface CrudRepository
ela é uma interface do Spring Data JPA que fornece uma funcionalidade CRUD completa para a entidade que está sendo gerenciada.
OrderService
Aqui estará nosso @Service
nele poderiamos implementar ou chamar um fluxo de negócio relativo a nossa entidade.
OrderController
Aqui vamos expor nossos endpoints, para que seja possível o acesso.
ExceptionHandlerController
Essa controller
será responsável por interceptar e tratar as exceções lançadas pela nossa aplicação:
SecurityConfiguration
Essa classe vai ativar nosso Resource Server e mapear cada role
para seu method
especifico:
DeliveryOrderServiceApplication
Por último implementamos nossa classe principal, que será responsável por inicializar nossa aplicação Spring Boot como vimos na parte 2. Aqui temos uma anotação nova a @EnableEurekaClient.
Essa anotação torna nossa aplicação visível ao Eureka Server com base nas configurações que definimos no application.yml
.
Subindo a aplicação
Agora chegou a hora subir o nosso MicroService, antes de inciar será necessário subir o Config Server , Eureka Server e o Authorization Server. Quando os três estiverem online vamos executar a classe DeliveryOrderServiceApplication.java.
Finalizado, acesse o endereço http://localhost:9091/
nosso servidor vai aparecer listado no Eureka Server:
Criando um Pedido
Antes de fazermos a requisição para o nosso MicroService, será necessário solicitarmos um token
para nosso Authorization Server. Vamos abrir o Postman e criar uma nova requisição:
- URL: http://localhost:9092/oauth/token?grant_type=password&username=admin&password=123456
- Authorization: Basic Y29kZXJlZjokMmEkMTAkcDlQazBmUU5BUVNlc0k0dnV2S0EwT1phbkREMg==
- Method: POST.
- Content-Type: application/json.
Clique em Send. Uma resposta similar a imagem abaixo será retornada:
Copiaremos o access_token
e o token_type
, pois será eles que iremos utilizar na próxima requisição.
Agora que já temos um token
vamos criar nosso primeiro pedido. Vamos até o Postman novamente e preencher:
- URL: http://localhost:9093/api/orders
- Mehod: POST
Clique em Headers e preencha com:
- Content-Type: application/json.
- Authorizarion: cole o
token_type
e oaccess_token
com um espacinho entre os dois.
Clique em body, depois em raw e selecione JSON(application/json), preencha o TextArea com um json similar ao conteúdo abaixo:
Clique em Send, um pedido com id
será retornado na requisição representando que o pedido foi criado com sucesso.
Pronto, agora podemos realizar os mesmo passos para os endpoints de busca e apagar, não podemos esquecer que alguns possuem parametros na requisição e que se não forem passados pode ocorrer erro.
Referências
http://projects.spring.io/spring-security-oauth/https://tools.ietf.org/pdf/draft-ietf-oauth-v2-31.pdf https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html