Implementando Comunicação entre Microserviços com Apache Kafka em Node.js
O Apache Kafka é uma plataforma distribuída de mensagens em tempo real, ideal para comunicação entre microserviços. Neste artigo, implementaremos um produtor e um consumidor Kafka usando Node.js.
1. Configuração do Ambiente
Antes de começar, instale o Docker e configure um cluster Kafka com Zookeeper:
docker-compose up -d
Crie um arquivo docker-compose.yml para rodar o Kafka:
version: '3.8'
services:
zookeeper:
image: bitnami/zookeeper:latest
container_name: zookeeper
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
ports:
- "2181:2181"
kafka:
image: bitnami/kafka:latest
container_name: kafka
depends_on:
- zookeeper
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
ports:
- "9092:9092"
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
depends_on:
- kafka
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
ports:
- "8089:8080"
networks:
default:
name: kafka-network
2. Criando o Produtor Kafka
O produtor enviará mensagens para um tópico Kafka.
Instale as dependências:
npm init -y
npm install kafkajs
Crie o arquivo producer.js:
const { Kafka } = require('kafkajs');
const kafka = new Kafka({
clientId: 'my-producer',
brokers: ['localhost:9092']
});
const producer = kafka.producer();
const sendMessage = async () => {
await producer.connect();
await producer.send({
topic: 'test-topic',
messages: [{ value: 'Olá, Kafka!' }],
});
await producer.disconnect();
};
sendMessage().catch(console.error);
3. Criando o Consumidor Kafka
O consumidor receberá mensagens do tópico.
Crie o arquivo consumer.js:
const { Kafka } = require('kafkajs');
const kafka = new Kafka({
clientId: 'my-consumer',
brokers: ['localhost:9092']
});
const consumer = kafka.consumer({ groupId: 'test-group' });
const run = async () => {
await consumer.connect();
await consumer.subscribe({ topic: 'test-topic', fromBeginning: true });
await consumer.run({
eachMessage: async ({ message }) => {
console.log(`Mensagem recebida: ${message.value.toString()}`);
},
});
};
run().catch(console.error);
4. Testando a Comunicação
1. Inicie o consumidor:
node consumer.js
2. Envie uma mensagem com o produtor:
node producer.js
O consumidor deve exibir a mensagem enviada!
Conclusão
Com Kafka, conseguimos uma comunicação assíncrona eficiente entre microserviços. Essa abordagem melhora a escalabilidade e a resiliência da aplicação.

Comentários
Postar um comentário