Pular para o conteúdo principal

Implementado Comunicação entre Microserviços Apache Kafka em Nodejs


Implementando Comunicação entre Microserviços com Apache Kafka em Node.js

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

Postagens mais visitadas deste blog

Como Subir o ChromaDB com Docker-Compose

Como Subir o ChromaDB com Docker-Compose Como Subir o ChromaDB com Docker-Compose O ChromaDB é um banco de dados vetorial de alto desempenho, ideal para aplicações que utilizam inteligência artificial e busca semântica. Neste post, vamos mostrar como subir o ChromaDB utilizando o Docker-Compose . Pré-requisitos Docker instalado ( Instruções ) Docker Compose instalado ( Instruções ) Passo 1: Criando o arquivo docker-compose.yml Crie um diretório para o projeto e dentro dele, crie o arquivo docker-compose.yml com o seguinte conteúdo: version: '3.8' services: chromadb: image: ghcr.io/chroma-core/chroma:latest container_name: chromadb restart: always ports: - "8000:8000" volumes: - chroma_data:/chroma volumes: chroma_data: driver: local Passo 2: Subindo o ChromaDB Agora, no terminal, navegue até a pasta onde está o arquivo ...

Guia de instalação e configuração do Portainer no Ubuntu

  Guia Completo de Instalação do Portainer.io no Docker O Portainer.io é uma ferramenta poderosa e amigável para o gerenciamento de containers Docker, Swarm e Kubernetes. Se você trabalha com containers, essa é uma solução essencial para facilitar sua administração. Vamos aprender como instalar e configurar o Portainer no Docker. O que é o Portainer.io? O Portainer.io é uma interface gráfica simples, que permite gerenciar de maneira centralizada seus containers, volumes, redes e imagens Docker. Ele pode ser utilizado por iniciantes e profissionais, pois oferece uma administração visual dos seus ambientes. Benefícios do Portainer Interface amigável : Gerencie containers de forma visual, tornando a administração mais simples e intuitiva. Gerenciamento centralizado : Administre múltiplos ambientes Docker/Kubernetes em um único local. Facilidade para iniciantes : Reduz a curva de aprendizado do Docker com sua interface gráfica. Gerenciamento de volumes e redes : ...

Streaming de Vídeos Grandes com Node.js e ReactJS

Se você precisa exibir vídeos grandes (mais de 1GB) sem sobrecarregar o frontend, a melhor solução é o streaming progressivo. 1. Configurando o Servidor Node.js Crie um servidor com Express para servir o vídeo em partes, permitindo que o player carregue apenas o necessário. const express = require("express"); const fs = require("fs"); const path = require("path"); const app = express(); const PORT = 3000; app.get("/video", (req, res) => { const videoPath = path.join(__dirname, "videos", "meu_video.mp4"); const stat = fs.statSync(videoPath); const fileSize = stat.size; const range = req.headers.range; if (range) { const parts = range.replace(/bytes=/, "").split("-"); const start = parseInt(parts[0], 10); const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1; const chunkSize = (end - start) + 1; const fileStream = fs.createReadStream(videoPath, { start, end }); ...