
Essa aula é introdutória, apresentando as tecnologias, o instrutor e como será o desenvolvimento deste curso.
Nesta aula irei demonstrar o que iremos construir com toda a stack apresentada, mostrando um diagrama da arquitetura e como as tecnologias irão se encaixar.
Nesta aula iremos iniciar a nossa parte teórica do curso, e falaremos sobre a arquitetura monolítica, quais seus conceitos, como é desenvolvida, para quê serve, quais aplicações, vantagens e desvantagens.
Nesta aula falaremos sobre a arquitetura de microsserviços, quais seus conceitos, como é desenvolvida, para quê serve, quais aplicações, vantagens e desvantagens.
Essa aula irá finalizar o primeiro módulo do curso, apenas retomando as características de uma arquitetura monolítica e uma arquitetura de microsserviços, realizando um comparativo entre ambas, e expondo suas vantagens e desvantagens.
Essa aula será responsável por iniciar o conteúdo de comunicação síncrona, informando conceitos e aplicações.
Essa aula irá descrever os métodos HTTP, seus conceitos e aplicações. Focando-se mais nos métodos GET, HEAD, POST, PUT, DELETE, PATCH e OPTIONS.
Essa aula irá abordar os códigos de status HTTP, focando-se em códigos das faixas 200, 400 e 500, explicando seus conceitos e aplicações.
Essa aula irá iniciar o nosso conteúdo sobre comunicação assíncrona, apresentando seus conceitos e aplicações. Iremos também iniciar o conhecimento de mensageria.
Nesta aula irei explicar um pouco sobre os tipos de Exchange que teremos no RabbitMQ, suas aplicações, e também algumas características de atributos de Exchanges e filas.
Aqui irei mostrar todas as ferramentas necessárias para desenvolvermos o projeto, e onde realizar o download de todas elas.
Nesta aula iremos criar nosso projeto no github para ir adicionando o desenvolvimento do projeto. O meu projeto estará disponível em: https://github.com/vhnegrisoli/curso-udemy-comunicacao-microsservicos
Esta é a nossa primeira aula prática, iremos subir 2 instâncias do PostgreSQL via comandos Docker. Acessaremos essas 2 instâncias pelo DBeaver.
Nesta aula prática, iremos subir uma instância do MongoDB via Docker. Acessaremos essa instância pelo Mongo Shell via CLI.
Nesta aula prática, iremos subir uma instância do RabbitMQ via Docker. Acessaremos essa instância pelo navegador na página do Rabbit Management Dashboard.
Nesta aula criaremos nosso arquivo docker-compose.yml e subiremos as 4 instâncias (2 postgresql, mongodb e rabbitmq) de uma vez com um único comando. Testaremos todas as instâncias rodando.
Nesta aula, iniciaremos a criação da nossa API de autenticação com Node.js e Express.js. Nesta aula iremos apenas criar o projeto com yarn, configurar o necessário para a aplicação rodar na porta 8080 e expor um endpoint simples para ver a API operante.
Nesta aula, iniciaremos a criação da nossa API de produto com Java 11 e Spring Boot. Nesta aula iremos apenas criar o projeto com gradle e o Spring Initializr (start.spring.io), em seguida vamos configurar o necessário para a aplicação rodar na porta 8081 e expor um endpoint simples para ver a API operante.
Nesta aula, iniciaremos a criação da nossa API de vendas com Node.js e Express.js. Nesta aula iremos apenas criar o projeto com yarn, configurar o necessário para a aplicação rodar na porta 8082 e expor um endpoint simples para ver a API operante. Iremos em seguida rodar as 3 APIs nas portas 8080, 8081 e 8082.
Nessa aula, criaremos os arquivos Dockerfile para criar as imagens Docker dos projetos em Node.js (Auth e Sales). Iremos também rodar as imagens.
Nessa aula, criaremos os arquivos Dockerfile para criar as imagens Docker dos projeto em Spring Boot (Product). Iremos também rodar a imagem.
Nessa aula, iremos adicionar nossas 3 APIs ao nosso docker-compose para subir os 6 containers juntos e aplicando variáveis de ambiente.
Nessa aula, iremos configurar a biblioteca Sequelize, o ORM para Node.js para acessar o PostgreSQL.
Nessa aula, iremos criar nossa Model com Sequelize e nossa tabela de usuário, iremos também configurar a API para inserir dados iniciais na aplicação ao ser executada.
Nessa aula, darei uma rápida explicação sobre o que é Multi-layered Architecture, ou Arquitetura Multicamada. E iremos iniciar a criação dos diretórios e classes para dividir nossa API nesse formato.
Nessa aula, iremos iniciar a implementação das classes UserRepository, com duas query ao banco de dados com Sequelize, e a classe UserService, a camada de negócio, contendo as regras de negócio da API e os padrões de retornos de dados e de definição das definições de erros.
Nessa aula, iremos iniciar a implementação da definição de classes específicas para definição de erros. Iremos também implementar nossa classe de tratamento de entrada e saída de dados, a UserController, e o roteamento dos endpoints da API, em UserRoutes.
Nessa aula, iremos iniciar a implementação da autenticação via JWT, iremos desenvolver toda a lógica de gerar um token de acesso com os dados do usuário e um endpoint de autenticação.
Nessa aula, iremos iniciar a implementação do middleware de autenticação do token de acesso, um intermediário que será sempre executado antes de qualquer endpoint protegido pelo token para garantir que o token enviado esteja presente nos headers da requisição, e claro, que esteja válido.
Nessa última aula do módulo do Auth-API, iremos implementar a proteção de endpoints específicos e também iremos implementar a gestão de acessos do sistema, ou seja, recuperar um usuário autenticado da requisição com token de acesso e restringir apenas o que esse usuário autenticado pode acessar dos dados da API.
Nessa aula, iremos configurar a conexão ao PostgreSQL em nossa aplicação Product-API através do arquivo application.yml.
Nessa aula, iremos criar nossas entidades de Produto, Categoria e Fornecedor com JPA e Spring Data, mapeando seus atributos. Iremos também já realizar a criação automática dessas entidades como tabelas no nosso PostgreSQL.
Nessa aula, criaremos um SQL inicial que será importado toda vez que subirmos a aplicação. Esses dados iniciais serão criados para que possamos começar a trabalhar com dados já existentes de categorias, fornecedores e produtos.
Nessa aula, criaremos a estrutura inicial da API. Iniciaremos criando as estruturas de DTO, Repository, Service e Controller. Criaremos também uma configuração global de Exceptions para tratamento de erros, e também um método POST para criar categorias. Iremos visualizar toda essa comunicação inicial.
Nessa aula criaremos os métodos POST para produto e fornecedor.
Nessa aula, testaremos os métodos criados anteriormente, e iniciaremos a implementação de endpoints de busca com métodos GET para Categoria.
Nessa aula, iremos criar os endpoints GET para os produtos e fornecedores, buscando dados por ID, todos, por nome, por categoria e fornecedores do produto. Testando tudo com Postman.
Nessa aula criaremos os endpoints PUT e DELETE das nossas 3 entidades e finalizaremos nosso CRUD.
Nessa aula, iremos adicionar a dependência das libs do JWT no nosso projeto, e iremos desenvolver a Service responsável por dar um parse no token e validar se a autenticação está correta.
Nessa aula, iremos criar um interceptador para todas as requisições que chegarem na API para validar se há um token de acesso informado, e se o token está válido, para concluir a fase de autenticação no microsserviço de Produto.
Nessa aula iremos criar a configuração de conexão com o RabbitMQ, e iremos configurar a criação de filas e do nosso tópico do tipo Exchange.
Nessa aula, criaremos nosso objeto de mensagem que trafegará do RabbitMQ para a API, e também criaremos nosso listener para sempre receber mensagens da fila product-stock.queue.
Nessa aula, implementaremos a lógica de atualizar o estoque do produto através da mensagem recebida pelo RabbitMQ do nosso listener, e após processar, iremos publicar no nosso sender, que será também implementado nessa aula.
Nessa aula, irei fazer um adendo à aula anterior para corrigir um problema de lógica que ocorreria devido ao processamento assíncrono. Aqui finalizaremos todo o fluxo envolvendo o RabbitMQ na aplicação de Product-API.
Nessa aula configuraremos a comunicação síncrona no projeto com chamadas HTTP para a aplicação de Sales-API utilizando o Spring Cloud OpenFeign. Iremos configurar um interceptor para que sempre seja repassado o access token do header para o FeignClient durante as chamadas HTTP. Iremos também implementar um endpoint para buscar todas as vendas de um produto, usando uma chamada GET entre as aplicações.
Nessa aula, iremos implementar o último endpoint da nossa API, um POST para validar o estoque de vários produtos. Esse endpoint será chamado pela aplicação de Sales-API logo antes de salvar uma venda para verificar se todos os produtos desejados possuem estoque.
Nessa aula, iniciaremos a configuração de conexão ao banco de dados NoSQL MongoDB na nossa aplicação de Sales-API.
Nessa aula, iniciaremos a criação da nossa Model do MongoDB de Order na nossa aplicação de Sales-API.
Nessa aula, criaremos a inserção de dados iniciaisa ao MongoDB criando duas Orders na nossa aplicação de Sales-API para sempre termos dados disponíveis ao subir a aplicação.
Nessa aula, iremos configurar o nosso interceptador (middleware) de validação do token de acesso na aplicação, para deixar protegida. Iremos basicamente replicar a configuração de Auth-API, tendo em vista que são as mesmas tecnologias, estruturas e implementações.
Nessa aula, criaremos a configuração e conexão ao RabbitMQ na nossa API, e iremos setar a criação do tópico, das filas e realizaremos o bind das filas aos tópcios através da routing key. Iremos também visualizar a criação dentro do container do RabbitMQ.
A nossa API em Node.js sobe muito rápido! Inclusive, pode subir antes mesmo do nosso container do RabbitMQ subir no nosso Docker-compose, para isso, nessa aula criaremos uma configuração para fazer com que a API em Node.js identifique que estamos em um ambiente de containers através de definição de variável de ambiente, e irá aguardar 30s para que tente se conectar ao RabbitMQ.
Nessa aula, criaremos o listener da nossa aplicação, que irá ficar sempre ouvindo o tópico de confirmação das vendas (sales-confirmation.queue).
Nessa aula, criaremos o sender da nossa aplicação, que irá ficar sempre publicar no tópico de atualização de estoque de produtos (product-stock-update.queue).
Nessa aula, iniciaremos a criação das classes Repository e Service da model Order. Iremos criar o fluxo inicial para iniciar um pedido.
Criando a função para atualizar um pedido através de uma mensagem que será ouvida pela fila sales-confirmation.queue do RabbitMQ. Iremos atualizar o pedido para um de seus estados finais: REJECTED ou APPROVED.
Nessa aula, iremos criar uma chamada HTTP REST com a biblioteca Axios, que é similar ao Spring Cloud OpenFeign, porém para o Node, e com ela, iremos criar a estrutura de uma requisição HTTP informando URL, headers de autorização, e o body da requisição. Iremos realizar essa chamada síncrona para validar os estoques dos produtos do pedido antes de realizar o save no MongoDB, como uma política de segurança.
Nessa aula, criaremos o Controller e os Routes para nosso pedido, e também um endpoint GET para buscar o order pelo ID e verificar se já foi atualizado no processo assíncrono ao passar pelo RabbitMQ.
Nessa aula, iremos finalizar os endpoints GET para buscar todos os pedidos e buscar todos os pedidos de um ID de produto, realizando uma consulta dentro de array no MongoDB com Mongoose. Iremos também testar todo o fluxo integrado.
Nessa aula, iremos ver uma introdução básica ao conceito de rastreabilidade, sua importância, e como implementaremos em nossas APIs através de headers de tracing, como transactionID, serviceID e o que eles significam dentro da aplicação.
Nessa aula, iremos implementar tracing no serviço Auth-API ao criar um middleware para validar o header transactionid enviado, e iremos realizar logs detalhados de entrada e saída da aplicação.
Nessa aula, iremos implementar tracing no serviço Sales-API ao criar um middleware para validar o header transactionid enviado, e iremos realizar logs detalhados de entrada e saída da aplicação. Iremos também transitar o transactionid entre as mensagens do RabbitMQ para termos o tracing no processo assíncrono a qual requisição a mensagem pertence.
Nessa aula, iremos adicionar os campos transactionId e serviceId como campos da nossa Model de Order no MongoDB para que possamos ter, em cada pedido salvo, a informação de qual requisição passou por ela, para facilitar o troubleshooting quando necessário.
Nessa aula, iremos implementar tracing no serviço Product-API ao adicionar ao middleware para validar o header transactionid enviado, e iremos realizar logs detalhados de entrada e saída da aplicação. Iremos também transitar o transactionid entre as mensagens do RabbitMQ para termos o tracing no processo assíncrono a qual requisição a mensagem pertence. Nessa aula conseguiremos realizar um tracking entre as aplicações, verificando o transactionId durante as requisições que existem em Product-API e Sales-API.
Nessa aula iremos definir todas as variáveis de ambiente nas aplicações, ou seja, substituir todos os locais que possuem dados setados manualmente e substituir pelo valor de uma variável de ambiente, para podermos rodar tanto local quanto em outro ambiente.
Nessa aula, iremos adicionar todas as variáveis criadas aos nossos serviços que foram definidos no docker-compose para que ele consiga especificar as configurações de conexão entre os containers para as aplicações.
Nessa aula, irei mostrar alguns ajustes que fiz nas APIs em Node.js para subirmos os containers sem problemas de concorrência entre os serviços.
Nessa aula iremos apenas executar um "docker-compose up --build" e verificar toda a stack funcionando através dos containers!
Essa aula é apenas demonstrativa e serve de apresentação para toda a aplicação que iremos construir durante o curso, toda a stack e como serão aplicadas.
Nesta aula, irei explicar o que ocorreu com o Heroku, e como iremos realizar deploy na nuvem novamente, porém, agora utilizando a cloud da AWS no plano Free Tier.
Nessa aula, iremos criar os 3 projetos no gihub, Auth-API, Product-API e Sales-API, porém, como repositórios separados para cada API para que possamos conectar cada um no Heroku via Heroku Dashboard.
Nessa aula, iremos criar o app no Heroku sales-microsservicos-auth-api, configurar o banco de dados PostgreSQL do Heroku (add-on) e conectá-lo à nossa API. Iremos criar todas as variáveis de ambiente da API de auth no Heroku e realizaremos nosso deploy. Por fim, vamos testar a API na nuvem.
Nessa aula, iremos criar um projeto no Atlas MongoDB e uma conexão ao banco de dados MongoDB em Cloud na versão grátis. Criaremos também uma conta na CloudAMQP e iremos criar uma instância do RabbitMQ rodando em Cloud. No Heroku, iremos criar o app sales-microsservicos-sales-api, configurar a conexão ao MongoDB e ao RabbitMQ, e iremos criar todas as variáveis de ambiente da API de sales. Por fim, realizaremos nosso deploy e iremos testar a API na nuvem.
Nessa aula, iremos criar o app no Heroku sales-microsservicos-product-api, configurar o banco de dados PostgreSQL do Heroku (add-on) e conectá-lo à nossa API. Iremos criar todas as variáveis de ambiente da API de product no Heroku, iremos conectar ao RabbitMQ do CloudAMQP e realizaremos nosso deploy. Por fim, vamos testar a API na nuvem.
Nessa aula, iremos adicionar o add-on Coralogix Logging em nossos 3 projetos do Heroku, ele vai nos disponibilizar um Dashboard e um Kibana para verificar o status da API e os Logs. Aqui, iremos tirar 100% de proveito dos logs de rastreamento que fizemos nos nossos serviços com TransactionID e ServiceID, trazendo boas práticas para troubleshooting.
Aqui irei apenas apresentar tudo o que foi desenvolvido na parte de cloud com nossos 3 microsserviços rodando no Heroku com seus bancos de dados em cloud e também irei mostrar as chamadas aos principais endpoints e os logs das APIs rodando no Kibana, conseguindo rastrear as requisições.
Neste curso, será aboradado o conceito teórico e prático sobre comunicação entre microsserviços e como aplicá-las. Praticamente iremos criar 3 APIs, duas delas com Node.js, MongoDB, Mongoose, Sequelize, PostgreSQL e JWT para autenticação. Iremos também criar uma API com Java 11 utilizando Spring Boot, PostgreSQL, Spring Data JPA, Spring Cloud OpenFeign e JWT, realizando a comunicação e integração entre essas duas tecnologias.
Iremos utilizar o RabbitMQ para a comunicação via filas de mensagens utilizando o protocolo AMQP com o intuito de criar uma comunicação assíncrona entre os serviços. Iremos também utilziar comunicação síncrona entre aplicações, ou melhor, chamadas a clients HTTP entre as APIs, integrando-as com as tecnologias FeignClient (Spring Boot) e Axios (Node.js).
Iremos também subir todas as nossas aplicações em containers Docker utilizando o Docker-compose.
No final do curso, faremos também o deploy de toda a arquitetura na AWS utilizando os serviços AWS Elastic Beanstalk, Amazon RDS e Amazon CloudWatch!
Neste curso, você verá uma abordagem teórica sobre arquitetura de microsserviços e arquitetura monolítica, suas comparações, vantagens e desvantagens, comunicação síncrona e assíncrona entre aplicações utilizando chamadas a API REST (HTTP) e filas de mensagens, além de conseguir compreender todos esses conceitos ao vê-los ocorrendo na prática. Iremos também detalhar os métodos e status HTTP, além também dos tipos de exchanges e filas de mensagens existentes no RabbitMQ para posterior implementação.
Iremos também implementar um básico de rastreabilidade de requisições entre microsserviços com logs nas APIs, IDs de requisições e iremos visualizar nossa rastreabilidade através dos logs da aplicação.
Ao fim deste curso você será capaz de criar suas próprias APIs e integrá-las da maneira que julgar necessário, com filas de mensagens ou chamadas REST, será capaz também de definir um ambiente de desenvolvimento e executar todos os serviços em containers, definindo suas próprias variáveis e arquivos de configuração de ambiente.
** ATUALIZAÇÕES DE 2023 **
Foram feitas atualizações de todas as biliotecas e frameworks em Node.js, foi atualizado o projeto para Spring Boot 3 e Java 17!
Foi realizado o deploy de toda a arquitetura na AWS utilizando os serviços AWS Elastic Beanstalk, Amazon RDS, Amazon CloudWatch, Cloud AMQP e Atlas MongoDB.