You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
O que é o Quarkus, e qual problema ele veio resolver?
Configuração do ambiente - Instalando o IntelliJ
Configuração do ambiente - Instalando o Java através do IntelliJ
Criando uma aplicação Quarkus (Usando code.quarkus.io)
Criando uma aplicação Quarkus (Usando o Quarkus CLI)
Criando uma aplicação Quarkus usando Maven
Explorando um projeto Quarkus
Onde está o método main?
Executando nossa aplicação Quarkus com o Quarkus CLI e Maven
Subindo nossa aplicação para o Github
Configurando o CI para a aplicação no Github
Módulo 2
Entendendo o que vamos criar (Um sistema para call for papers) e apresentando a arquitetura do sistema com o C4 Model (Diagrama de Contexto e de Contêineres)
Criando a entidade Event
Criando os testes de unidade para a classe Event
Criando nosso primeiro endpoint REST com JAX-RS para cadastro de Events em memória
Versionamento de APIs
Conheça sobre o padrão DTO
Adicionando a extensão quarkus-rest-jackson para o Quarkus saber lidar com a serialização/deserialização de JSON
Adicionando a extensão quarkus-smallrye-openapi para a documentação da nossa API e para consumirmos de forma amigável os nossos recursos REST em tempo de desenvolvimento
Instalando o driver JDBC e o Hibernate em nossa aplicação
Persistindo um Event no banco de dados com EntitityManager
Realizando testes de integração POST /v1/events
Atualizando nossa aplicação para utilizar o Panache ORM
Implementando a paginação de Events com Panache ORM
Implementando a busca por ID de Events com Panache ORM
Implementando a deleção de um Event com Panache ORM
Implementando a edição de um Event com Panache ORM
Módulo 3
Validando dados de entrada com Bean Validation (@NotNull, @Size, etc.)
Melhorando os erros da nossa API para os nossos clientes
Utilizando Problem Details para melhorar e padronizar nossas respostas de erro
Revisitando os princípios REST e o modelo de maturidade de Richardson aplicados ao nosso domínio de Call4Papers
Organizando nossa aplicação em camadas com CDI
Injeção de dependência, escopos (@ApplicationScoped, @RequestScoped) e qualifiers
Separando Resource, Service e Repository
Protegendo nossos endpoints: autenticação em memória com Quarkus Security
Protegendo nossos endpoints: autenticação com usuários armazenados em banco de dados
Implementando autorização com RBAC e JSR-250 (@RolesAllowed, @PermitAll, @DenyAll)
Módulo 4
Por que quebrar nosso sistema em microsserviços? Revisitando a arquitetura C4 apresentada no início do curso e o domínio do Call4Papers (proposal, email e event)
Reestruturando o projeto em um monorepo multi-módulo Maven: criando os módulos proposal-service, email-service e event-service
Configurando um banco de dados dedicado (Database per Service) para cada microsserviço com Docker Compose
Modelando as entidades Event e Local no event-service com Panache
Modelando a entidade Slot e o seu relacionamento com Event e Local
Criando os endpoints REST para o ORGANIZADOR cadastrar um Event e o seu Local
Criando o endpoint REST para o ORGANIZADOR cadastrar os Slots de um Event
Comunicação síncrona entre microsserviços: comparando REST Clients (Java HttpClient, RestEasy Classic e Quarkus REST)
Consumindo o proposal-service a partir do event-service com o MicroProfile Rest Client
Explorando o MicroProfile Config e Health Checks
Explorando o MicroProfile Fault Tolerance
Compilando nossos microsserviços como imagem nativa com o GraalVM
Módulo 5
Entendendo transações e o modelo ACID
Criando o endpoint de avaliação de propostas no event-service (aprovar ou rejeitar)
Implementando a busca pelo próximo Slot compatível e disponível para a proposta aprovada
Alocando automaticamente o Slot na aprovação, dentro da mesma transação, com @Transactional
Tratando o caso de não haver Slot disponível (rollback e status "aprovada aguardando slot")
Propagação de transações: entendendo REQUIRED, REQUIRES_NEW e NESTED
Criando um filtro para logar as requisições entre os microsserviços
Criando um interceptador para uma regra de rate limit no proposal-service
Módulo 6
Entendendo tokens JWT: estrutura, claims e assinatura
Gerando e validando tokens JWT no event-service
Introduzindo SSO, OpenID Connect e OAuth2
Subindo o Keycloak com Docker Compose
Configurando o Realm e os papéis SPEAKER, REVISOR e ORGANIZADOR no Keycloak
Protegendo o proposal-service como Resource Server com quarkus-oidc
Protegendo o email-service e o event-service como Resource Servers com quarkus-oidc
Restringindo o cadastro de Event, Local e Slot apenas ao papel ORGANIZADOR
Liberando a avaliação de propostas para os papéis REVISOR e ORGANIZADOR
Módulo 7
Otimizando consultas com cache usando Redis no proposal-service
Configurando o cliente Redis com a extensão quarkus-redis-client
Entendendo o MicroProfile Reactive Messaging: canais, @Incoming/@Outgoing e o conceito de conectores
Configurando o conector Kafka (smallrye-kafka) com a extensão quarkus-messaging-kafka
Publicando eventos de mudança de status de proposta em um tópico Kafka
Consumindo eventos do Kafka no email-service para notificar o SPEAKER
Consumindo eventos do Kafka no event-service para sincronizar as propostas submetidas
Conhecendo o RabbitMQ: filas, exchanges e bindings (laboratório isolado, comparando mensageria tradicional com streaming de eventos)
Módulo 8
Orquestrando todo o sistema Call4Papers com Docker Compose (Postgres x3, Kafka, Redis, Keycloak)
Cadastrando um Event, um Local e seus Slots como ORGANIZADOR
Submetendo uma proposta como SPEAKER
Aprovando a proposta como REVISOR e acompanhando a alocação automática do Slot
Conferindo a notificação por e-mail recebida pelo SPEAKER
Revisão geral do curso e próximos passos
Módulo 9
Por que usar Flyway em vez do hibernate.hbm2ddl.auto em produção?
Adicionando a extensão quarkus-flyway e criando a primeira migration (V1__create_table.sql)
Versionando as migrations do proposal-service, event-service e email-service
Rodando as migrations automaticamente na inicialização de cada microsserviço
Módulo 10
Configurando profiles para produção (%prod) e variáveis de ambiente
Gerenciando segredos (senhas de banco, client secrets do Keycloak) fora do código-fonte
Preparando health checks, métricas e logs estruturados para produção
Empacotando nossos microsserviços como imagem de contêiner com a extensão quarkus-container-image-jib
Rodando as migrations do Flyway como parte do processo de build e deploy da imagem de contêiner
Criando uma conta gratuita no Red Hat OpenShift (Developer Sandbox)
Fazendo o deploy do proposal-service no OpenShift com a extensão quarkus-openshift
Fazendo o deploy do event-service e do email-service no OpenShift
Testando o fluxo completo do Call4Papers rodando em produção