Skip to content

menegasso/spring-kafka-orders

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Pedidos com Kafka

Este projeto é uma aplicação Spring Boot que simula um sistema de pedidos, utilizando Apache Kafka em KRaft Mode (sem Zookeeper) para o processamento assíncrono de pedidos em tempo real. A aplicação foi construída para demonstrar como o Kafka pode ser utilizado em sistemas distribuídos para enviar, consumir e processar pedidos de forma eficiente e escalável.

Tecnologias Utilizadas

  • Spring Boot: Framework Java para criação de aplicações web e APIs.
  • Apache Kafka (KRaft Mode): Plataforma de streaming distribuído para enviar, receber e processar dados em tempo real, sem a necessidade do Zookeeper.
  • Gradle: Gerenciador de dependências e automação de builds.

Funcionalidades do Sistema de Pedidos

  • Recebimento de Pedidos: O sistema recebe pedidos através de uma API REST.
  • Produção de Mensagens: Quando um pedido é recebido, uma mensagem é enviada para o Kafka, simulando o processamento assíncrono do pedido.
  • Processamento de Pedidos: O consumidor Kafka recebe as mensagens do Kafka e processa os pedidos de forma assíncrona, simulando a execução de tarefas como validação de estoque, cobrança e envio de confirmação ao cliente.
  • Monitoramento de Processamento: O sistema pode ser monitorado por logs e endpoints para visualizar o estado de processamento dos pedidos.

Arquitetura do Sistema

  1. API de Recebimento de Pedidos:

    • A aplicação oferece um endpoint REST onde novos pedidos são recebidos.
    • Cada pedido gerado é enviado para um tópico Kafka.
  2. Produtor Kafka:

    • Um componente que envia mensagens para o Kafka. As mensagens representam pedidos que estão aguardando processamento.
  3. Consumidor Kafka:

    • Um componente que consome as mensagens do Kafka e simula o processamento de pedidos, como validação de estoque, cobrança, etc.
  4. Kafka:

    • O Kafka é utilizado como o middleware de mensageria para garantir a comunicação assíncrona entre os produtores e consumidores de pedidos.

Como Executar Localmente

Pré-requisitos

  1. Apache Kafka em KRaft Mode deve estar instalado e em execução localmente. Caso não tenha o Kafka instalado, siga os passos abaixo:

    1. Baixe e extraia o Apache Kafka.

    2. No diretório do Kafka, crie um diretório para os logs do Kafka:

      mkdir -p /tmp/kraft
    3. Em seguida, inicie o Kafka em KRaft Mode (sem Zookeeper):

      bin/kafka-server-start.sh config/kraft/server.properties

      Importante: O arquivo server.properties já está configurado para rodar no KRaft Mode. No KRaft Mode, não é necessário configurar o Zookeeper, e o Kafka gerencia os metadados de forma autônoma.

  2. Java 11 ou superior deve estar instalado.

  3. Gradle instalado, caso não tenha, siga a documentação oficial do Gradle.

Rodando a Aplicação

  1. Clone o repositório:

    git clone https://github.com/menegasso/spring-kafka-orders.git
    cd spring-kafka-orders
  2. Configure o application.properties para usar o endereço do seu broker Kafka local:

    spring.kafka.bootstrap-servers=localhost:9092
    spring.kafka.consumer.group-id=pedido-processamento
    spring.kafka.consumer.auto-offset-reset=earliest
    spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
    spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
    spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
    spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
  3. Execute a aplicação com Gradle:

    ./gradlew bootRun
  4. A aplicação estará rodando no http://localhost:8080.

Testando a Aplicação

  1. Envio de Pedidos: Use uma ferramenta como o Postman ou cURL para enviar uma requisição POST para o endpoint /orders:

Exemplo de requisição: curl -X POST http://localhost:8080/api/pedidos -H "Content-Type: application/json" -d '{"produto": "Produto XYZ", "quantidade": 10}'

  1. Processamento de Pedidos: Após o envio do pedido, ele será enviado para um tópico Kafka e o consumidor começará a processá-lo, realizando ações como validação de estoque e outras operações simulada.

Estrutura do Projeto

  • src/main/java: Código-fonte da aplicação, incluindo configurações Kafka e lógica de negócios.

    • PedidoProducer: Responsável por enviar mensagens de pedidos para o Kafka.
    • PedidoConsumer: Responsável por consumir mensagens de pedidos e simular o processamento.
    • KafkaConfig: Configurações do Kafka para o produtor e consumidor.
    • PedidoController: Controlador responsável pela API de recebimento de pedidos.
    • src/main/resources: Arquivos de configuração, como o application.properties.
  • build.gradle: Arquivo de configuração do Gradle.

Contribuindo

  1. Faça um fork deste repositório.
  2. Crie uma branch para a sua feature (git checkout -b minha-feature).
  3. Faça as alterações necessárias e envie um pull request.

Contato

Se você tiver dúvidas ou sugestões, sinta-se à vontade para abrir uma issue no GitHub ou me contactar diretamente.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages