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.
- Docker e Docker Compose instalados
- Go 1.24 ou superior (para desenvolvimento local)
- Kafka v3.6 (via Docker)
.
├── 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
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/v1docker network create kafka-networkdocker-compose -f docker-compose.kafka.yml up -ddocker-compose up -d --buildAcesse 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 1Verifique a existência do tópico:
docker exec -it <nome_do_container_kafka> kafka-topics --list --bootstrap-server localhost:9092echo '{"ordemDeVenda": "order12345", "etapaAtual": "FATURADO"}' | docker exec -i <nome_do_container_kafka> kafka-console-producer --broker-list localhost:9092 --topic meu-topicoPara 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)Verifique os logs do microserviço consumidor para confirmar consumo e envio:
docker logs -f kafka-consumer- 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).