Copyright© 2025 Rayhan Kobir

LinkedInGithubLetCode
Node.js-এ Webhook ইমপ্লিমেন্টেশন: PostgreSQL ও Redis সহ

Node.js-এ Webhook ইমপ্লিমেন্টেশন: PostgreSQL ও Redis সহ

June 18, 2024 (1 year ago)

Webhook হলো এমন একটি HTTP-based কলব্যাক মেকানিজম, যা কোনো নির্দিষ্ট ইভেন্ট ঘটলে স্বয়ংক্রিয়ভাবে নির্দিষ্ট URL-এ ডেটা পাঠায়। এটি API-র বিপরীতে, যেখানে ক্লায়েন্টকে বারবার চেক করতে হয় (polling)। Webhook ইভেন্ট-ড্রিভেন আর্কিটেকচারের জন্য খুবই কার্যকর।


Webhook কীভাবে কাজ করে?

১. ইভেন্ট সোর্স (যেমন: পেমেন্ট গেটওয়ে, গিটহাব) কোনো ইভেন্ট ঘটলে,
২. Webhook Endpoint-এ HTTP POST রিকোয়েস্ট পাঠায়,
৩. Endpoint সেই ডেটা প্রসেস করে, ডাটাবেজে সংরক্ষণ করে, অথবা অন্য সার্ভিসে পাঠায়।

Webhook Flow Diagram


কেন PostgreSQL ও Redis?

  • PostgreSQL:
    রিলেশনাল ডাটাবেজ, পারসিস্টেন্ট স্টোরেজ ও জটিল কুয়েরির জন্য।
  • Redis:
    ইন-মেমরি ডাটাবেজ, দ্রুত ক্যাশিং ও কিউ ম্যানেজমেন্টের জন্য।

Step-by-Step Implementation

১. Webhook Endpoint তৈরি (Node.js + Express)

const express = require("express");
const bodyParser = require("body-parser");
const { Pool } = require("pg");
const Redis = require("ioredis");
 
const app = express();
app.use(bodyParser.json());
 
// PostgreSQL ও Redis কানেকশন
const pool = new Pool({ connectionString: process.env.PG_URL });
const redis = new Redis(process.env.REDIS_URL);
 
// Webhook Endpoint
app.post("/webhook", async (req, res) => {
  const event = req.body;
 
  // ১. ডেটা Redis-এ ক্যাশ করুন (ফাস্ট প্রসেসিং)
  await redis.lpush("webhook_events", JSON.stringify(event));
 
  // ২. ডেটা PostgreSQL-এ সংরক্ষণ করুন (পারসিস্টেন্স)
  await pool.query(
    "INSERT INTO webhook_events (event_type, payload, received_at) VALUES ($1, $2, NOW())",
    [event.type, JSON.stringify(event.payload)]
  );
 
  res.status(200).json({ received: true });
});
 
app.listen(4000, () => console.log("Webhook server running on port 4000"));

২. PostgreSQL টেবিল স্কিমা

CREATE TABLE webhook_events (
  id SERIAL PRIMARY KEY,
  event_type VARCHAR(255),
  payload JSONB,
  received_at TIMESTAMP DEFAULT NOW()
);

৩. Redis কীভাবে ব্যবহার হচ্ছে?

  • লিস্ট (Queue) হিসেবে:
    ইভেন্ট দ্রুত প্রসেসিং বা ব্যাকগ্রাউন্ড জব-এর জন্য Redis-এ রাখা হয়।
  • ক্যাশিং:
    সাম্প্রতিক ইভেন্ট দ্রুত দেখাতে বা ড্যাশবোর্ডে রিয়েল-টাইম আপডেট দিতে।

৪. ব্যাকগ্রাউন্ড প্রসেসিং (Worker Example)

// worker.js
const Redis = require("ioredis");
const redis = new Redis(process.env.REDIS_URL);
 
async function processEvents() {
  while (true) {
    const event = await redis.brpop("webhook_events", 0);
    if (event) {
      const data = JSON.parse(event[1]);
      // এখানে ব্যাকগ্রাউন্ড প্রসেসিং (যেমন: ইমেইল, নোটিফিকেশন)
      console.log("Processing event:", data);
    }
  }
}
 
processEvents();

ডায়াগ্রাম: Webhook আর্কিটেকচার

Webhook Architecture


বেস্ট প্র্যাকটিস

  • ডেটা ভ্যালিডেশন: Webhook ডেটা অবশ্যই যাচাই করুন।
  • রেট লিমিটিং: একাধিক রিকোয়েস্ট থেকে সার্ভার বাঁচাতে।
  • রিট্রাই মেকানিজম: ফেইল হলে পুনরায় প্রসেস করার ব্যবস্থা।
  • লগিং ও মনিটরিং: ইভেন্ট প্রসেসিং ট্র্যাক করুন।

উপসংহার

Node.js-এ Webhook ইমপ্লিমেন্টেশন সহজ, তবে স্কেলেবল ও রিলায়েবল সিস্টেমের জন্য PostgreSQL ও Redis-এর মতো টুল ব্যবহার করা জরুরি। এই আর্কিটেকচারে আপনি দ্রুত, রিয়েল-টাইম ও পারসিস্টেন্ট ইভেন্ট প্রসেসিং

Back