Press ESC to close

Implementasi Microservices dengan Docker, Node.js, dan Message Broker (RabbitMQ/Kafka)

WhatsAppTelegramFacebookXThreadsCopy Link

Bayangkan Anda membangun aplikasi besar—misalnya platform e-commerce atau sistem booking—lalu tiba-tiba salah satu fitur seperti pembayaran atau email down. Apakah seluruh aplikasi harus ikut mati? Di sinilah arsitektur microservices menjadi solusi. Banyak developer ingin beralih dari sistem monolitik ke microservices, tetapi sering kali terhambat oleh pertanyaan seperti: “Harus mulai dari mana?”, “Bagaimana komunikasi antar layanan?”, atau “Apakah butuh Docker dan message broker?”

Jika Anda mengalami kebingungan serupa, artikel ini adalah panduan lengkap yang Anda butuhkan. Kita akan membahas langkah demi langkah membangun microservices menggunakan Node.js, menjalankannya dengan Docker, dan menghubungkannya melalui message broker seperti RabbitMQ atau Kafka.

Anda akan memahami:

  • Apa itu microservices dan keuntungannya.
  • Bagaimana memecah aplikasi menjadi beberapa layanan.
  • Cara menjalankan layanan dengan Docker.
  • Mengirim pesan antar layanan menggunakan RabbitMQ/Kafka.
  • Tips menghindari kesalahan umum pemula.

Apa Itu Arsitektur Microservices?

Microservices adalah pendekatan arsitektur di mana aplikasi dipecah menjadi layanan-layanan kecil yang berdiri sendiri.
Setiap service memiliki tugas spesifik, berjalan independen, dan berkomunikasi satu sama lain melalui HTTP atau message broker.

Keuntungan utama microservices:

  • Deployment lebih fleksibel.
  • Skalabilitas per layanan.
  • Satu service error ≠ aplikasi mati total.

Langkah-Langkah Implementasikan Microservices dengan Docker, Node.js, dan Message Broker

1. Menentukan Layanan (Service Decomposition)

Sebelum menulis kode, tentukan layanan yang akan Anda buat. Contoh skenario E-commerce:

Nama ServiceFungsi
Auth ServiceLogin & registrasi pengguna
Product ServiceKelola data produk
Order ServicePesanan dan transaksi
Notification ServiceKirim email/notifikasi

Tips: Hindari langsung membuat terlalu banyak service. Mulai dari 2–3 service sederhana.


2. Menyiapkan Project Node.js untuk Tiap Service

Buat folder untuk setiap service:

/auth-service
/product-service
/order-service

Contoh struktur sederhana untuk auth-service:

npm init -y
npm install express

index.js:

const express = require("express");
const app = express();

app.get("/auth/status", (req, res) => {
  res.send("Auth Service running");
});

app.listen(3001, () => {
  console.log("Auth Service on port 3001");
});

3. Membungkus Service dengan Docker

Buat Dockerfile di setiap service:

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["npm", "start"]

Jalankan dengan Docker:

docker build -t auth-service .
docker run -p 3001:3001 auth-service

4. Integrasi Message Broker (RabbitMQ/Kafka)

Pada microservices, message broker digunakan agar layanan bisa berkomunikasi asinkron tanpa saling menunggu respons.

RabbitMQ (Sederhana untuk Pemula)

Install RabbitMQ via Docker:

docker run -d --hostname rabbit --name rabbitmq \
-p 5672:5672 -p 15672:15672 rabbitmq:3-management

Kirim pesan dari Order Service ke Notification Service:

const amqp = require("amqplib");

async function send(msg) {
  const conn = await amqp.connect("amqp://localhost");
  const channel = await conn.createChannel();
  await channel.assertQueue("emailQueue");
  channel.sendToQueue("emailQueue", Buffer.from(msg));
}

send("Order #123 berhasil dibuat");

Kafka (Lebih Kuat untuk Skala Besar)

Kafka cocok untuk traffic tinggi. Contoh konsep dasar:

  • Producer → Mengirim event
  • Consumer → Mendengarkan event
  • Topic → Kanal pesan

(Tutorial Kafka dapat dijadikan artikel lanjutan.)


5. Menghubungkan Semua Service dengan Docker Compose

Buat docker-compose.yml:

version: "3"
services:
  auth-service:
    build: ./auth-service
    ports:
      - "3001:3001"
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"

Jalankan:

docker-compose up -d

6. Monitoring & Error Handling

  • Hindari direct HTTP antar service → gunakan message queue untuk skalabilitas.
  • Gunakan logs untuk melacak error:
    docker logs auth-service
  • Tambahkan retry mechanism jika message broker gagal.

Anda sudah memahami fondasi membangun microservices modern dengan Node.js, Docker, dan message broker seperti RabbitMQ atau Kafka. Dengan arsitektur ini, aplikasi Anda lebih fleksibel, scalable, dan tahan terhadap failure.

Ingin melangkah lebih jauh? Baca juga: “Mengimplementasikan API Gateway dan Service Discovery pada Microservices.”

WhatsAppTelegramFacebookXThreadsCopy Link