Alura > Cursos de Programação > Cursos de Java > Conteúdos de Java > Primeiras aulas do curso Microsserviços na prática: implementando com Java e Spring

Microsserviços na prática: implementando com Java e Spring

Considerações iniciais - Apresentação

Boas-vindas ao curso de Microsserviços na prática: implementando com Java e Spring, eu sou a Jacqueline Oliveira e vou acompanhar você com esse conteúdo. São três coisas que adoro falar a respeito que é Java, Spring e microsserviços, então estou super animada.

Nos cursos que são pré-requisitos para este curso, você obteve alguns conhecimentos sobre os fundamentos, a parte de padrões, conceitos, como decidir quebrar um monolito para um microsserviço e várias outras motivações que levam a trabalhar com esse tipo de arquitetura.

Você inclusive viu um projeto com uma infra rodando, viu sobre o conceito de mensageria, utilizou container, então esse não é o foco desse curso.

A ideia é trabalharmos com o Alura Food, que vai ser o nosso projeto e vamos usar um tipo de arquitetura de microsserviços em que o Alura Food era um monolito e decidimos quebrar duas partes da aplicação e transformá-la em microsserviço.

Então vamos ter dois microsserviços: um de pedido e outro de pagamento, cada um com seu banco de dados e vamos simular a nossa aplicação na prática, iniciar o projeto para podermos construir essa aplicação. Logo, o que vamos fazer no curso, qual vai ser a nossa prática?

Vamos criar as APIs dos microsserviços do zero, pelo menos de um deles, vamos usar as migrations para criar as tabelas no banco de dados, fazer o versionamento, vou ter um projeto que vai atuar no service discovery, vamos ter um servidor e os microsserviços vão poder se registrar nele para ocorrer a comunicação.

Vamos também aprender a parte de balanceamento de carga, então em um dos serviços vou ter algumas instâncias rodando simultaneamente, vamos ver que na hora de fazer a requisição vai ser distribuído cada hora para uma das instâncias para fazer esse balanceamento.

Depois vamos incluir na arquitetura o nosso Gateway para centralizar as requisições, vamos fazer a parte de comunicação síncrona e aprender também a parte de circuit breaker e fallback para evitar falhas ou como vamos reagir no momento da falha.

Então vai ser um projeto bem bacana de construirmos do zero e ainda não vamos abordar, para o conteúdo não ficar muito denso, a parte de servidor de configuração, de tracing distribuído de logs, não vou falar de infra, não vamos colocar nada em container, não vamos subir nada para a nuvem, nem segurança e comunicação assíncrona. Tudo isso vai ficar para outro momento.

Então, como vamos usar o Java e a solução Spring, vamos ter o nosso Gateway, vai ter aplicação cada uma com seu banco de dados, vamos ter o config server e o circuit breaker, mas não vamos ter os itens que mencionei, de servidor de configuração, mensageria e a parte de logs, que vai ser para outro momento.

Mas vai ser muito incrível esse curso e espero vocês. Vamos juntos?

Considerações iniciais - Projeto e conceitos

Bem-vindo novamente ao nosso curso de Microsserviços na prática: implementando com Java e Spring, no curso que antecede a este, que é um pré-requisito, você conseguiu ver como é um projeto completo com infra, front-end, container, mensageria. Como funciona um projeto grande de microsserviços, como ele é idealizado e como tudo se comunica.

O objetivo nesse curso é resgatar alguns conceitos e começar a criar o primeiro microsserviço. Qual a ideia? Nós vimos que os objetivos e necessidades basicamente são a facilidade de mudança, é difícil ter uma base de código grande com muitas pessoas trabalhando nela, sendo preciso você conseguir realizar manutenções de maneira mais fácil.

Precisamos de times menores, a aplicação cresceu e os times aumentaram bastante, então queremos trabalhar com um time menor. Queremos também o reuso, uma das motivações de trabalhar decompondo um monolito em microsserviço é você ter a possibilidade de reuso nos projetos.

Além disso, conseguimos ter diversidade tecnológica e experimentação, quando temos um projeto menor fica mais fácil você trocar um framework ou um banco de dados do quer ter uma aplicação enorme que já está consolidada e possui muitas coisas envolvidas para poder trocar.

Temos também uma ideia de maior isolamento de falhas, então quero que caso uma parte da aplicação falhe que não afete o restante, ela vai continuar funcionando normalmente sem afetar os meus clientes.

E por fim, escalabilidade independente e flexível, para ser possível subir mais instâncias só da parte da aplicação que, de fato, vai ter requisições, que vai precisar estar escalada, estar distribuída.

Qual é o nosso projeto? Vamos trabalhar com o AluraFood, o nosso sistema de delivery. Vamos supor que você foi contratado para trabalhar no AluraFood como desenvolvedor e hoje em dia trabalhamos com o monolito, tem um monolito do AluraFood, foi assim que começou e que, inclusive, é a prática começar como um monolito.

O monolito começou com pequenas funcionalidades, basicamente são seis bem gerais, a administração, os restaurantes, os pedidos, o pagamento, as entregas e as avaliações. Só que com o tempo isso foi crescendo, então na parte de administração o cliente pode ter vários endereços, formas de pagamento, notificações e chat, cupom e programa de fidelidade.

Os estabelecimentos também, que hoje em dia nem são só restaurantes, podem incluir outros como farmácias ou supermercados. Então, é preciso mostrar eles dentro de um raio de distância, quais as formas de pagamento, itens e valores, tipo de entrega e classificação. Logo, tem várias nuances que fizeram a aplicação crescer.

A parte de pedidos também, que a todo momento pedidos e pagamentos vai variando, o pedido passa por vários status, se foi confirmado, aceito, se saiu para entrega, se foi concluído ou se houve problemas com o pedido.

O pagamento também, cada dia tem uma nova forma de pagamento, se é em dinheiro, cartão de débito, crédito ou corporativo, tem a carteira hoje em dia que você coloca saldo e ele vai abatendo, pode fazer doações, então a aplicação foi crescendo.

Vários tipos de entrega, que pode ser por conta própria, por parceiros, por repasse para o entregador, gratificação para o entregador ou código de rastreio e tipos de avaliações, o cliente pode fazer uma avaliação geral, do entregador, do pedido, do restaurante ou do aplicativo.

A partir disso, qual é a ideia? Temos o monolito que está grande e queremos quebrar em alguns microsserviços. O que faremos? Já sair quebrando todos os serviços do monolito? Não. A boa prática diz que não é assim que deve ser feito.

Nossa ideia é pegar o monolito e gradualmente remover as partes que consideramos mais críticas. Por exemplo, para nós a parte de pagamentos e pedidos são partes que conseguimos isolar, então vamos começar por elas.

Essa é a ideia, pegar parte da aplicação que os testes demoram mais, por exemplo, pagamento é uma área crítica visto que precisa ser testado, precisa estar certo, ter certeza que todos vão receber e que o dinheiro vai ser debitado do cliente.

Então é um módulo crítico, tem que estar muito bem testado e não queremos que a aplicação fique 3 ou 4 horas rodando um teste. Logo, optou-se por separar o módulo de pagamento e pedido, teremos dois microsserviços de pagamento e pedido.

Qual o nosso desafio? Justamente esse, se no curso anterior você viu toda a infra funcionando, o desafio aqui é começar com Java e Spring. Então você foi contratado agora, está como monolito e você quer começar a quebrar, como você vai começar a formular o primeiro microsserviço e fazer a comunicação?

É o nosso objetivo nesse curso, usar o Java e o Spring, algumas ferramentas do Spring para conseguirmos começar e mostrar passo a passo como isso funciona, como geralmente partimos desse início.

Então, vamos conseguir mostrar absolutamente tudo? Não, não tem como mostrar tudo no curso, mas vamos conseguir incluir um gateway, vamos ter duas aplicações com o banco de dados próprio, ter um service registry, fazendo o registro dos serviços, vamos conseguir ver balanceamento de carga e parte de circuit breaker.

Vai ser um projeto bem bacana e vamos fazer juntos passo a passo, vamos preparar o ambiente e espero você no próximo vídeo para começar.

Considerações iniciais - Preparando o ambiente

Eu quis criar um vídeo complementando o material que deixamos na sessão preparando o ambiente para ficar bem claro as versões que estou usando e tudo que precisa ser instalado, é um passo que não pode ser pulado.

Muitas vezes vocês querem trabalhar com as mesmas versões que estamos usando no momento do curso, e eu inclusive recomendo já que pode ser que se você usar uma versão anterior ou superior, apresente algum problema ao digitar algum comando ou tentar fazer parte do projeto.

Então vou mostrar passo a passo tudo que vou fazer de download, as instalações são bem típicas sendo apenas selecionar o botão "Next" e "Finish", essa parte nem vou mostrar, vou mostrar somente os downloads de tudo que estou fazendo e as configurações das variáveis de ambiente, como é que vai ser.

Vamos começar pelo Java, vamos usar a JDK 17 que é a última versão LTS (Long Term Support), no momento da gravação desse vídeo já foi lançado o Java 18, mas vamos trabalhar com a versão 17 que é uma versão de suporte a longo prazo, geralmente são essas as versões que as empresas optam por usar ao desenvolver as aplicações.

Então, na página da Oracle , você tem a versão Java 17 e vou escolher para o meu sistema operacional, no caso é o Windows, mas tem as outras opções como Linux e macOS. Você pode escolher ou a versão MSI, ou a EXE, é indiferente, vou escolher a EXE mesmo.

Outro tópico que vamos fazer download é o Maven , que é a nossa ferramenta para ajudar a fazer os builds e controlar as dependências.

Nós temos curso de Maven na Alura, tudo que estivermos instalando aqui tem um curso adicional na plataforma, então para o banco de dados que vamos usar que é o MySQL, temos curso na plataforma, para a IDE que é o Intellij também temos o curso IntelliJ IDEA: aumente a sua produtividade em projetos Java , temos curso de Maven.

Então, tudo isso que estamos instalando e configurando para o ambiente tem informação adicional, caso precise, tem como se aprofundar nesses assuntos.

No Maven, vamos baixar o arquivo "apache-maven-3.8.5-bin.tar.gz" da versão 3.8.5, ele é o único com a instalação um pouco diferente, vamos precisar descompactar a pasta em um determinado lugar. Os outros geralmente instalamos na pasta padrão indicada.

Fizemos o download no Maven e agora vamos fazer o do IntelliJ IDEA , para o IntelliJ assim como no MySQL vamos ter duas versões. A community, que é uma versão gratuita e a Ultimate que é a versão paga.

Na versão paga, quando clicamos no botão "Baixar", já é mencionado algumas diferenças entre as versões, então fica a sua escolha baixar o ultimate por um período de 30 dias e depois comprar ou a versão community, eu vou fazer o download da community, mas obviamente a ultimate possui muito mais recursos.

Vou clicar no botão "Baixar" na página de downloads e também vamos baixar o MySQL clicando no menu "Downloads" e escolher o community que é no final da página em MySQL Community (GPL) Downloads , vou escolher a opção "MySQL Installer for Windows", tem duas opções de instalador ou o completo, ou o menor, que ele vai baixando conforme a demanda.

Vou escolher a primeira opção "Windows (x86, 32-bit), MSI Installer" que é com o instalador menor. Quando clicamos no botão "Download", que se localiza após o nome da opção, aparece a opção pedindo para logar ou fazer uma conta, não é necessário fazer uma conta, podemos clicar direto em "No thanks, just start my download".

E por fim, a última ferramenta que vamos baixar é o Postman , sendo a ferramenta que vamos usar para fazer as requisições, o get, o post, para poder fazer o nosso CRUD e testar o microsserviço. Então, vamos fazer o download da versão desktop, ele já detectou o meu sistema operacional, vou clicar no botão "Windows 64-bit" e já vai iniciar o download.

Observe que temos um monte de downloads acontecendo, vou pausar esse vídeo e fazer as instalações, o único diferente é o do Maven já que tem que ser extraído para uma pasta, vou mostrar como se faz, e vamos configurar as variáveis de ambiente e ver as coisas funcionando.

Então, temos aqui o arquivo zip do Maven "apache-maven-3.8.5-bin.zip" no meu computador, coloquei ele em "C:/Maven". Vamos clicar com o botão direito do mouse em cima do arquivo e escolher a opção "Extrair tudo" para essa pasta, vamos clicar no botão "Extrair" no canto inferior direito da tela.

O Maven que é o único que não possui um instalador e tivemos que descompactar, fizemos a extração dele e colamos na pasta "Arquivos de programa" para ficar padronizado, o caminho que ele está é em "C: > Arquivos de Programas > apache-maven-3.8.5".

Agora precisamos configurar para que as variáveis de ambiente estejam corretas, então vamos clicar no ícone do Windowns e procurar por "Variáveis de ambiente", já que precisamos saber se tenho Maven e o Java configurados corretamente.

Vai aparecer uma tela com o título "Propriedades do Sistema" e vamos clicar no botão "Variáveis de Ambiente", onde verificamos isso exatamente? Na variável de ambiente Path Na segunda janela, que é o caminho, vamos selecionar essa opção.

Vai abrir outra janela com o título "Editar a variável de ambiente", então ao editar note que ele não tem nem o Maven e nem o Java para reconhecer as versões conforme vamos instalando. Então, vamos indicar esse caminho do Maven bin copiando o caminho do computador mesmo após entrar na pasta "bin".

Vamos copiar para incluir esse caminho nas variáveis de ambiente, então voltando para "Editar a variável de ambiente" vamos selecionar o botão "Novo" do lado direito da tela, colar o caminho que copiamos e em seguida, selecionar o botão "Ok" no final da página.

Também precisamos criar uma variável JAVA_HOME para dizer onde que está a instalação. Então, na tela "Variáveis de Ambiente" vamos clicar no botão "Novo" da segunda janela e em "Nome da variável" vamos digitar "JAVA_HOME", por padrão é tudo com letra maiúscula.

No campo "Valor da variável" vamos indicar o caminho, então selecionando o botão "Procurar no Diretório" vamos procurar em "Arquivos de Programas" que é onde geralmente a instalação é feita. Logo, o caminho é "Arquivos de programa > Java > jdk>17.0.3.1" e vamos selecionar o botão "Ok" no fim da tela, para indicar esse caminho, novamente vamos selecionar o botão "Ok".

Por fim, vamos voltar na variável path selecionando com duplo clique para incluir mais um caminho para o JAVA_HOME clicando no botão "Novo" do lado direito e digitando "%JAVA_HOME%\bin", novamente vamos clicar no botão "Ok".

Vamos precisar ir ao terminal para conferir se as versões já estão sendo exibidas corretamente, clicando no ícone do Windows e procurando por "prompt de comando". No prompt de comando vamos digitar "java -version" e selecionar "Enter", note que ele já reconheceu o java 17.

java -version

Agora só precisamos analisar se a versão do Maven também está correta, no prompt de comando vamos digitar "mvn -v" e note que já foi reconhecido também, aparece "apache maven 3.8.5".

mvn -v

Então o nosso ambiente, as nossas variáveis de ambiente já estão configuradas e agora basta abrir o intellij e começar a fazer o projeto, o que vamos fazer a partir de agora.

Na primeira abertura o intellij vai pedir para confirmar a leitura, vamos selecionar a opção "I confirm that I have read and accept the terms of this User Agreement" e, em seguida, clicar no botão "Continue" no canto inferior direito e na próxima página vamos clicar no botão "Don't Send" para não enviar estatísticas.

Pronto, vai ser feita a abertura do intellij para nós, a princípio vai ser exibida essa tela básica com o título "Welcome to intellij IDEA" com as opções "New project", "Open" e "Get from VCS". Essa versão community não tem integração para já ir ao site do Spring e criar o projeto do zero.

Então vamos ter que ir ao site do Spring para poder criar o projeto, vou passar o caminho e no próximo vídeo faremos passo a passo a criação do nosso microsserviço de pagamento usando o Spring e o intellij e todas as outras ferramentas que configuramos. Espero você na próxima aula.

Sobre o curso Microsserviços na prática: implementando com Java e Spring

O curso Microsserviços na prática: implementando com Java e Spring possui 178 minutos de vídeos, em um total de 62 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

Plus

De
R$ 1.800
12X
R$109
à vista R$1.308
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

Matricule-se

Pro

De
R$ 2.400
12X
R$149
à vista R$1.788
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Luri, a inteligência artificial da Alura

    Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com Luri até 100 mensagens por semana.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas