Skip to content

Setoue/microservice-with-kafka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

microservice-with-kafka

Um exemplo de arquitetura de microsserviços em Java com Spring Boot e Apache Kafka, dividido em dois módulos:

  • api: microsserviço produtor (REST API para cadastrar e consultar “CarPosts” e publicar eventos no Kafka)
  • store-car: microsserviço consumidor (escuta o tópico de “CarPosts” e persiste/mostra as mensagens)

Índice


Visão Geral

Este repositório demonstra um padrão básico de microsserviços em Java que se comunicam via Kafka. O módulo api proporciona uma API HTTP para criar e consultar anúncios de carros, persistindo no banco e publicando eventos no Kafka. O módulo store-car consome essas mensagens e as processa (por exemplo, gravando em outro banco ou log).


Tecnologias e Pré-requisitos

  • Java 17+
  • Maven 3.6+
  • Apache Kafka 3.x (KRaft ou com ZooKeeper)
  • (Opcional) Docker & Docker Compose para orquestrar Kafka/ZooKeeper

Estrutura do Projeto

microservice-with-kafka/
├── pom.xml                  ← _Parent POM multimódulo_
├── api/                     ← Microsserviço produtor
│   ├── src/main/java/…  
│   ├── src/main/resources/
│   │   └── application.properties  
│   └── pom.xml  
└── store-car/               ← Microsserviço consumidor
    ├── src/main/java/…  
    ├── src/main/resources/
    │   └── application.properties  
    └── pom.xml  

Configuração

Em cada módulo, configure em src/main/resources/application.properties:

# Porta HTTP da aplicação
server.port=8085           # (api), 8086 (store-car)

# Endereço do Kafka
spring.kafka.bootstrap-servers=localhost:9092

# Producer (api)
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
app.topic.car-posts=car-posts

# Consumer (store-car)
spring.kafka.consumer.group-id=store-car-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.trusted-packages=*

Dica: Você pode sobrescrever essas propriedades via variáveis de ambiente (SPRING_KAFKA_BOOTSTRAP_SERVERS, etc.) ou –Dspring-boot.run.arguments.


Como Executar

  1. Clone o repositório

    git clone https://github.com/Setoue/microservice-with-kafka.git
    cd microservice-with-kafka
  2. Inicie o Kafka (com ZooKeeper ou KRaft)

    # Exemplo com KRaft
    bin/kafka-storage.sh format -t $(uuidgen) -c config/kraft/server.properties
    bin/kafka-server-start.sh config/kraft/server.properties
  3. Crie o tópico

    bin/kafka-topics.sh --create \
      --topic car-posts \
      --bootstrap-server localhost:9092 \
      --partitions 1 --replication-factor 1
  4. Construa e rode o módulo API (produtor)

    cd api
    mvn clean spring-boot:run
  5. Construa e rode o módulo STORE-CAR (consumidor)

    cd ../store-car
    mvn clean spring-boot:run

Endpoints REST (módulo api)

Método Rota Descrição
POST /api/cars Cria um novo anúncio de carro (e publica evento no Kafka). Corpo JSON:
{
  "brand": "Toyota",
  "model": "Corolla",
  "price": 45000.0
}
```  |
| GET    | `/api/cars`         | Retorna todos os anúncios cadastrados.  |
| GET    | `/api/cars/{id}`    | Retorna anúncio por ID.                |
| PUT    | `/api/cars/{id}`    | Atualiza anúncio existente.            |

> **Exemplo de uso**  
```bash
curl -X POST http://localhost:8085/api/cars \
  -H "Content-Type: application/json" \
  -d '{"brand":"Honda","model":"Civic","price":35000}'

Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para detalhes.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages