Skip to content

Latest commit

 

History

History
144 lines (98 loc) · 2.92 KB

File metadata and controls

144 lines (98 loc) · 2.92 KB

Kafka Consumer Microservice

Descrição

Microserviço em Go que consome mensagens de um tópico Kafka, processa payloads JSON e encaminha para outro microserviço via REST API (PATCH). Possui retry automático após 30 minutos em caso de falha, incluindo queda do consumidor.


Pré-requisitos

  • Docker e Docker Compose instalados
  • Go 1.24 ou superior (para desenvolvimento local)
  • Kafka v3.6 (via Docker)

Estrutura do Projeto

.
├── README.md
├── go.mod
├── go.sum
├── main.go
├── internal/
│   ├── consumer/
│   │   └── kafka.go
│   ├── service/
│   │   └── processor.go
│   └── config/
│       └── config.go
├── .gitignore
├── docker-compose.kafka.yml
├── docker-compose.yml
├── Dockerfile
├── payload.json
└── .env

Configuração do Ambiente

1. Variáveis de ambiente (.env)

Configure as variáveis no arquivo .env na raiz do projeto:

KAFKA_BOOTSTRAP_SERVERS=kafka:9092
KAFKA_USERNAME=exemplo
KAFKA_PASSWORD=exemplo
KAFKA_SASL_MECHANISM=SCRAM-SHA-256
KAFKA_SECURITY_PROTOCOL=SASL_PLAINTEXT
KAFKA_GROUP_ID=meu-grupo
KAFKA_TOPIC=meu-topico
KAFKA_TOPIC_DLQ=meu-topico-dlq
TARGET_SERVICE_URL=http://apifake:8080/api/v1

Como rodar

2. Criar rede Docker

docker network create kafka-network

3. Subir Kafka + Zookeeper (arquivo docker-compose.kafka.yml)

docker-compose -f docker-compose.kafka.yml up -d

4. Subir microserviço consumidor

docker-compose up -d --build

Criar tópico Kafka

Acesse o container Kafka para criar o tópico:

docker exec -it <nome_do_container_kafka> kafka-topics --create --topic meu-topico --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

Verifique a existência do tópico:

docker exec -it <nome_do_container_kafka> kafka-topics --list --bootstrap-server localhost:9092

Enviar mensagem de teste para o tópico

echo '{"ordemDeVenda": "order12345", "etapaAtual": "FATURADO"}' | docker exec -i <nome_do_container_kafka> kafka-console-producer --broker-list localhost:9092 --topic meu-topico

Simular serviço destino REST

Para testes locais, crie uma API REST que aceite PATCH em /api/v1. Exemplo simples em Python (Flask):

from flask import Flask, request

app = Flask(__name__)

@app.route('/api/v1', methods=['PATCH'])
def patch_handler():
    print('Payload recebido:', request.json)
    return '', 200

if __name__ == '__main__':
    app.run(port=8080)

Logs

Verifique os logs do microserviço consumidor para confirmar consumo e envio:

docker logs -f kafka-consumer

Observações

  • Em caso de falha na chamada REST ou erro interno, a mensagem será reprocessada após 30 minutos.
  • O microserviço está configurado para conectar-se ao Kafka via rede Docker (kafka-network).