কম্পিউটার টিউটোরিয়াল

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান

বড় স্কেলের ওয়েব অ্যাপ্লিকেশন বিল্ড করার সময়, গতি একটি বড় প্রाथমিকতা। ইউজাররা আর লম্বা সময় অপেক্ষা করতে চায় না, এবং তাদের অপেক্ষা করা উচিত নয়। কিন্তু কিছু প্রসেস সময় নেয়, এবং সেগুলো আর দ্রুত করা বা বাদ দেওয়া যায় না।

মেসেজ কিউ এই সমস্যাটি সমাধান করে সাধারণ রিকোয়েস্ট-রেসপন্স যাত্রার একটি অতিরিক্ত শাখা প্রদান করে। এই অতিরিক্ত শাখা নিশ্চিত করে যে ইউজাররা তাৎক্ষণিক রেসপন্স পায়, এবং সময় সাপেক্ষ প্রসেসগুলো পার্শ্বে করা যায়। সবাই খুশি হয়ে বাড়ি ফিরে।

এই আর্টিকেলটি মেসেজ কিউ কী এবং কীভাবে একটি খুব সিম্পল অ্যাপ্লিকেশন বিল্ড করে সেগুলোর সাথে শুরু করতে হয় সেটি ব্যাখ্যা করার ওপর ফোকাস করবে। আপনার Node.js-এর বেসিকস সাথে পরিচিত হওয়া উচিত, এবং আপনার লোকালি বা ক্লাউড ইনস্ট্যান্সে রেডিস ইনস্টল করা উচিত। রেডিস ইনস্টল করার উপায় জানতে এখানে ক্লিক করুন।

কিউ কী?

একটি কিউ হলো একটি ডেটা স্ট্রাকচার যা এন্টিটি একꝊ অর্ডারে সংরক্ষণ করার অনুমতি দেয়। কিউ ফার্স্ট-ইন-ফার্স্ট-আউট (FIFO) প্রিন্সিপাল ব্যবহার করে।

কম্পিউটার সায়েন্সে কিউ কনসেপ্ট রোজমর্রার জীবনে কিউ কনসেপ্টের মতোই যেখানে মানুষ লাইন দিয়ে জিনিস পাওয়ার জন্য খাড়ায়। আপনি কিউর পেছন থেকে যোগ দিন, আপনার পালা আসার পর্যন্ত অপেক্ষা করুন, তারপর সার্ভিস পাওয়ার পর কিউর সামনে থেকে বের হয়েন।

কম্পিউটার সায়েন্সে, যখন একটি প্রসেস যেমন একটি API রিকোয়েস্ট চলছে, এবং আপনাকে কারেন্ট ফ্লো থেকে একটি নির্দিষ্ট টাস্ক (যেমন ইমেইল পাঠানো) সরাতে হয়, আপনি সেটি একটি কিউতে পুশ করুন এবং প্রসেস চালিয়ে যান।

নিচের ডায়াগ্রামটি কিউর লাইফসাইকেল ইলাস্ট্রেট করে:

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান Queue Lifecycle | https://optimalbits.github.io/bull/

জব কী?

একটি জব হলো কিউতে ব্যবহৃত যেকোনো ডেটা পিস, সাধারণত একটি JSON-লাইক অবজেক্ট।

এই আর্টিকেলের কভার ইমেজে প্রদর্শিত মত, আপনি একটি জবকে এয়ারপোর্টে কিউতে দাঁড়ানো প্রতিটি ব্যক্তি হিসেবে চিন্তা করতে পারেন। প্রতিটি ব্যক্তি একটি ব্রিফকেস ধরে থাকে যাতে স্পেসিফিক ডেটা থাকে, এবং অন্যান্য নির্দেশনা (পাসপোর্ট এবং যেখানে প্রয়োজন মেডিকেল পেপার) যা তাদের পালা হলে সাহায্য করবে।

এই কিউতে যোগ দিতে वाले নতুন লোক পিছন থেকে যাবে (শেষ ব্যক্তি হিসেবে), এবং মানুষ সামনে থেকে সার্ভিস পাবে। জবগুলোও একই প্রসেসে প্রসেস হয়, প্রতিটি জবে এর প্রসেসিং için ব্যবহার될 ডেটা থাকে। নতুন জবগুলো পিছন থেকে যোগ হয় যখন জবগুলো সামনে থেকে বের হয়।

জব প্রোডিউসার কী?

একটি জব প্রোডিউসার হলো যেকোনো কোড পিস যা একটি জব কিউতে যোগ করে। রিয়েল লাইফে, এটি এয়ারপোর্টের সিকিউরিটি গার্ড যারা মানুষকে দিয়ে দিক নির্দেশ করে, তাদের বলে বিভিন্ন উদ্দেশ্যে কোন কিউতে যোগ দিতে হবে।

একটি জব প্রোডিউসার একটি জব কনজিউমারের থেকে স্বাধীনভাবে অস্তিত্ব বজায় রাখতে পারে। এর মানে, একটি মাইক্রোসার্ভিস সেটআপে, একটি নির্দিষ্ট সার্ভিস শুধু কিউতে জব যোগ করার সাথে চিন্তিত হতে পারে, কিন্তু সেগুলো পরে কীভাবে প্রসেস হবে তার সাথে নয়।

ওয়ার্কার (জব কনজিউমার) কী?

একটি ওয়ার্কার, বা জব কনজিউমার, হলো একটি প্রসেস বা ফাংশন যা একটি জব এক্সিকিউট করতে পারে। একটি ওয়ার্কারকে ব্যাংক ক্যাশিয়ার হিসেবে চিন্তা করুন যিনি ব্যাংকে কিউতে দাঁড়ানো মানুষকে সার্ভ করছেন। যখন প্রথম ব্যক্তি আসে, সে কিউতে একমাত্র ব্যক্তি হিসেবে যোগ হয়। ক্যাশিয়ার তাকে ডাকায় এবং কিউ খালি হয়।

ক্যাশিয়ার транজ্যাকশন প্রসেস করার জন্য নির্দিষ্ট ডিটেইল চান। যতক্ষণ ক্যাশিয়ার সেই কাস্টমারকে সার্ভ করছেন, চারজন আরো কাস্টমার লাইন দিয়ে খাড়াতে পারে। সে কিউতে থাকবে যতক্ষণ না ক্যাশিয়ার প্রথম কাস্টমারের সাথে শেষ করে এবং পরবর্তীকে ডাকায়। কিউ ওয়ার্কারের সাথে একই প্রসেস — সে কিউর প্রথম জব পিক করে, এবং প্রসেস করে।

ফেইল্ড জব কী?

প্রায়শই, কিছু জব প্রসেসিংয়ের সময় ফেইল করে।

এখানে কিছু কারণ দেওয়া হলো কেন একটি জব ফেইল করতে পারে:

  • ইনভ্যালিড বা মিসিং ইনপুট ডেটা: যখন একটি জব প্রসেস করার জন্য প্রয়োজনীয় ডেটা মিসিং থাকে, জব ফেইল করবে। উদাহরণস্বরূপ, একটি ইমেইল পাঠানোর জব রিসিপিয়েন্টের ইমেইল ঠিকানা ছাড়া ফেইল করবে।
  • টাইমআউট: একটি জব কিউ মেকানিজম দ্বারা ফেইল করা হয় যদি সেটি সাধারণ চেয়ে বেশি সময় নেয়। এটি জবের একটি ডিপেন্ডেন্সির ইস্যু বা অন্য কিছু കാരণে হতে পারে, কিন্তু সাধারণত আপনি চান না একটি সিঙ্গেল জব চিরকাল চলে।
  • নেটওয়ার্ক বা ইনফ্রাস্ট্রাকচার সমস্যা: এই সমস্যাগুলো প্রায় আপনার কন্ট্রোলের বাইরে, কিন্তু এগুলো ঘটে। একটি ডাটাবেস কানেকশন এরর উদাহরণস্বরূপ একটি জব ফেইল করবে।
  • ডিপেন্ডেন্সি ইস্যু: কখনও কখনও একটি জব কিছু এক্সটার্নাল রিসোর্সের ওপর নির্ভরশীল থাকে ভালো ফাংশন করার জন্য। যখনই এই অন্য রিসোর্স অনুপলব্ধ বা অনসাক্সেসফুল, জব ফেইল করবে।

যখন জব ফেইল করে, আপনি আপনার কিউ মেকানিজম কনফিগার করতে পারেন সেগুলো রিট্রাই করার জন্য। আপনি إما জবকে তাৎক্ষণিক রিট্রাই করতে পারেন, অথবা একটা ক্যালকুলেটেড টাইমের পর। আপনি একটি मैক্সিমাম Anzahl attempts সেট করতে পারেন, যা সুপারিশ করা হয়। যদি না, আপনি একটি জব চালিয়ে যাবেন যা সবসময় ফেইল করবে অনন্তকাল।

কিউ মাইক্রোসার্ভিসের মধ্যে রবাস্ট কমিউনিকেশন চ্যানেল তৈরি করতে উপকারী। একাধিক সার্ভিস একই কিউ ব্যবহার করতে পারে। ভিন্ন সার্ভিসগুলো ভিন্ন সমস্যা দায়িত্বে থাকতে পারে। যখন একটি সার্ভিস তার টাস্ক কম্প্লিট করে, সেটি অন্য সার্ভিসে একটি জব পুশ করতে পারে যেটির ওয়ার্কাররা সেই জবের জন্য অপেক্ষা করছে। সেই সার্ভিস সেটি পিক আপ করবে এবং ডেটার সাথে যা প্রয়োজন তাই করবে।

কিউ একটি প্রসেস থেকে ভারী টাস্ক অফলোড করার জন্যও উপকারী। আপনি এই আর্টিকেলে দেখবেন, ইমেইল পাঠানোর মত একটি সময় সাপেক্ষ টাস্ক কিউতে রাখা যায় রেসপন্স টাইম ধীর হয়ে যাওয়া থেকে বাচাতে।

কিউ সিঙ্গেল পয়েন্ট অফ ফেইলার এড়াতে সাহায্য করে। একটি প্রসেস যেটিতে ফেইল করার ক্ষমতা আছে এবং রিট্রাই করা যায়, সেটি একটি কিউতে প্রসেস করা সেরা যেখানে সেটি কিছু সময় পর রিট্রাই করা যায়।

কিউ ব্যবহার করে একটি সিম্পল অ্যাপ্লিকেশন কীভাবে বিল্ড করবেন

এই আর্টিকেলে, আমরা Node.js এবং রেডিস ব্যবহার করে একটি সিম্পল প্রজেক্ট বিল্ড করব। আমরা Bull লাইব্রেরি ব্যবহার করব কারণ এটি কিউ সিস্টেম বিল্ড করার জটিলতা অনেকটুকু সহজ করে দেয়। প্রজেক্টে একটি সিঙ্গেল এন্ডপয়েন্ট থাকবে ইমেইল পাঠানোর জন্য।

একটি নতুন Node.js প্রজেক্ট তৈরি করুন

mkdir nodejs-queue-project cd nodejs-queue-project npm init -y 

উপরের কমান্ডগুলো nodejs-queue-project নামে একটি নতুন ফোল্ডার এবং সেটিতে একটি package.json ফাইল তৈরি করবে। package.json ফাইলটি এমন দেখাবে:

{ "name": "nodejs-queue-project", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } 

প্রয়োজনীয় ডিপেন্ডেন্সি ইনস্টল করুন

npm i express @types/express @types/node body-parser ts-node ts-lint typescript nodemon nodemailer @types/nodemailer 

উপরের কমান্ডগুলো প্রজেক্টের জন্য প্রয়োজনীয় বিভিন্ন প্যাকেজ এবং ডিপেন্ডেন্সি ইনস্টল করবে।

ইনস্টলেশন হলে, আপনি আপনার package.json-এর scripts সেকশন আপডেট করতে পারেন একটি dev কমান্ড থাকতে। আপনার পুরো package.json ফাইল এখন এমন দেখাবে:

{ "name": "nodejs-queue-project", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "nodemon src/app.ts" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@types/express": "^4.17.17", "@types/node": "^20.3.3", "@types/nodemailer": "^6.4.8", "body-parser": "^1.20.2", "express": "^4.18.2", "nodemailer": "^6.9.3", "nodemon": "^2.0.22", "ts-lint": "^4.5.1", "ts-node": "^10.9.1", "typescript": "^5.1.6" } } 

উপরের ফাইলটি আপনার সকল ইনস্টলড ডিপেন্ডেন্সি দেখাচ্ছে। npm run dev কমান্ড dev স্ক্রিপ্ট ব্যবহার করলে চলবে।

এন্ডপয়েন্ট কীভাবে বিল্ড করবেন

প্রথমে একটি নতুন ফোল্ডার তৈরি করুন নাম src। এই ফোল্ডারটি আপনার সকল কোড ফাইল ধারণ করবে। সেটিতে থাকবে প্রথম ফাইল অ্যাপ্লিকেশনটির রুট ফাইল — package.json ফাইলে ডিফাইন করা app.ts ফাইল।

আমরা app.ts ফাইলটি ব্যবহার করব প্রয়োজনীয় প্যাকেজ ইমপোর্ট করতে এবং একটি সিম্পল সার্ভার তৈরি করতে একটি সিঙ্গেল এন্ডপয়েন্ট সহ ইমেইল পাঠানোর জন্য নিচের মত:

import express from "express"; import bodyParser from "body-parser"; import nodemailer from "nodemailer"; const app = express(); app.use(bodyParser.json()); app.post("/send-email", async (req, res) => { const { from, to, subject, text } = req.body; // টিউটোরিয়াল হলে একটি টেস্ট অ্যাকাউন্ট ব্যবহার করুন const testAccount = await nodemailer.createTestAccount(); const transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587, secure: false, auth: { user: testAccount.user, pass: testAccount.pass, }, tls: { rejectUnauthorized: false, }, }); console.log("Sending mail to %s", to); let info = await transporter.sendMail({ from, to, subject, text, html: `<strong>${text}</strong>`, }); console.log("Message sent: %s", info.messageId); console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info)); res.json({ message: "Email Sent", }); }); app.listen(4300, () => { console.log("Server started at https://localhost:4300"); }); 

এখন, আপনি আপনার সার্ভার শুরু করতে পারেন npm run dev আপনার টার্মিনালে চালিয়ে। আপনার টার্মিনালে Server started at [https://localhost:4300](https://localhost:4300) বলে একটি মেসেজ দেখতে পাবেন।

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান npm run dev message

আপনি এন্ডপয়েন্টটি Postman-এর মতো একটি টুল দিয়ে টেস্ট করতে পারেন:

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান Endpoint testing on Postman

রিকোয়েস্টটি প্রায় ৪ সেকেন্ড নিলো যেমন স্ক্রিনশটে দেখানো হয়েছে। একটি এন্ডপয়েন্টের জন্য এটি খুব ধীর। আপনার টার্মিনালে লুক করলে আপনাকে একটি URLও দেখতে मिलবে যেখানে আপনি পাঠানো ইমেইল প্রিভিউ করতে পারেন।

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান

লিংকটি খুললে আপনি দেখতে পাবেন ইমেইলটি কেমন দেখাচ্ছে।

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান Email content

কিউ কীভাবে তৈরি করবেন

প্রসেসকে আরও দ্রুত করার জন্য, ইমেইলকে পরে পাঠাতে কিউতে রাখা যায় এবং ইউজারকে তাৎক্ষণিক রেসপন্স পাঠানো যায়।

এটি করার জন্য, bull লাইব্রেরি এবং এর @types লাইব্রেরি ইনস্টল করুন যেটি আমরা কিউ তৈরি করতে ব্যবহার করব। অর্থাৎ:

npm i bull @types/bull 

bull ব্যবহার করে একটি নতুন কিউ তৈরি করা খুব সহজ — শুধু একটি নাম দিয়ে একটি নতুন Bull অবজেক্ট ইনস্ট্যানশিয়েট করুন:

// এটি আপনার ফাইলের টপে যাবে import Bull from 'bull'; const emailQueue = new Bull("email"); 

যখন কিউ শুধু কিউ নাম দিয়ে তৈরি হয়, এটি ডিফল্ট রেডিস কানেকশন URL ব্যবহার করার চেষ্টা করে: localhost:6379। আপনি যদি অন্য URL ব্যবহার করতে চান, সিম্পলি Bull ক্লাসে একটি সেকেন্ড অবজেক্ট পাস করুন অপশনস অবজেক্ট হিসেবে:

const emailQueue = new Bull("email", { redis: "localhost:6379", }); 

এই পয়েন্টে, আপনি একটি সিম্পল ফাংশন তৈরি করতে পারেন যা জব প্রোডিউসার হিসেবে কাজ করবে এবং প্রতিবার রিকোয়েস্ট আসলে একটি জব কিউতে যোগ করবে।

type EmailType = { from: string; to: string; subject: string; text: string; }; const sendNewEmail = async (email: EmailType) => { emailQueue.add({ ...email }); }; 

নবজাতক ফাংশনটি, sendNewEmail, একটি অবজেক্ট গ্রহণ করে যেটিতে নতুন ইমেইল পাঠানোর ডিটেইল থাকে EmailType টাইপের। সেটিতে সেন্ডারের ইমেইল ঠিকানা (from), রিসিপিয়েন্টের ইমেইল ঠিকানা (to), ইমেইলের subject, এবং ইমেইলের কন্টেন্ট (text) থাকে। তারপর এটি কিউতে একটি নতুন জব পুশ করে।

আপনি এখন এই ফাংশনটি ব্যবহার করতে পারেন রিকোয়েস্টের সময় ইমেইল পাঠানোর বদলে। এন্ডপয়েন্টটি মডিফাই করুন এটি করার জন্য:

app.post("/send-email", async (req, res) => { const { from, to, subject, text } = req.body; await sendNewEmail({ from, to, subject, text }); console.log("Added to queue"); res.json({ message: "Email Sent", }); }); 

এই পয়েন্টে, কোডটি সিম্পলার এবং প্রসেসটি দ্রুত। রিকোয়েস্ট শুধু প্রায় ৪০ms নেয় — আগের চেয়ে প্রায় ১০০x দ্রুত।

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান Endpoint testing with Postman

এই পয়েন্টে, ইমেইল একটি কিউতে যোগ হয়েছে। এটি কিউতে থাকবে যতক্ষণ না প্রসেস হয়। জবটি একই অ্যাপ্লিকেশন বা অন্য সার্ভিস (যদি মাইক্রোসার্ভিস সেটআপে) দ্বারা প্রসেস করা যায়।

জবগুলো কীভাবে প্রসেস করবেন

সাইকেলটি অসম্পূর্ণ এবং বেকার যদি মেইলগুলো কিউ থেকে কখনো বের না হয়। আমরা একটি জব কনজিউমার তৈরি করব জবগুলো প্রসেস করতে এবং কিউ খালি করতে।

আমরা এটা করতে পারি একটি ফাংশনের লজিক তৈরি করে যা একটি Job অবজেক্ট গ্রহণ করে এবং ইমেইল পাঠায়:

const processEmailQueue = async (job: Job) => { // টিউটোরিয়াল হলে একটি টেস্ট অ্যাকাউন্ট ব্যবহার করুন const testAccount = await nodemailer.createTestAccount(); const transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587, secure: false, auth: { user: testAccount.user, pass: testAccount.pass, }, tls: { rejectUnauthorized: false, }, }); const { from, to, subject, text } = job.data; console.log("Sending mail to %s", to); let info = await transporter.sendMail({ from, to, subject, text, html: `<strong>${text}</strong>`, }); console.log("Message sent: %s", info.messageId); console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info)); return nodemailer.getTestMessageUrl(info); }; 

উপরের ফাংশনটি একটি Job অবজেক্ট গ্রহণ করে। অবজেক্টটির উপযোগী প্রপার্টি আছে যা একটি জবের স্ট্যাটাস এবং ডেটা দেখায়। এখানে, আমরা data প্রপার্টি ব্যবহার করছি।

এই পয়েন্টে, আমাদের কাছে শুধু একটি ফাংশন আছে। এটি অটোমেটিক্যালি জব পিক করে না কারণ এটি জানে না কোন কিউর সাথে কাজ করতে হবে।

কিউর সাথে কানেক্ট করার আগে, আপনি কয়েকটা রিকোয়েস্ট পাঠিয়ে কিউতে কিছু জব যোগ করতে পারেন। আপনি আপনার redis-cli-এ এই কমান্ড চালিয়ে বর্তমানে কিউড ইমেইল জব চেক করতে পারেন:

LRANGE bull:email:wait 0 -1 

এটি ইমেইল वেটলিস্ট চেক করে, এবং অপেক্ষামান জবের ids রিটার্ন করে।

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান Redis CLI

আমি কয়েকটা জব তৈরি করেছি শুধু দেখানোর জন্য যে ওয়ার্কারগুলো কীভাবে আসলে কাজ করে।

এখন, ওয়ার্কারকে কিউর সাথে কানেক্ট করুন এই লাইন কোড যোগ করে:

emailQueue.process(processEmailQueue); 

এটি করার পর আপনার app.ts ফাইলটি এমন দেখাবে:

import express from "express"; import bodyParser from "body-parser"; import nodemailer from "nodemailer"; import Bull, { Job } from "bull"; const app = express(); app.use(bodyParser.json()); const emailQueue = new Bull("email", { redis: "localhost:6379", }); type EmailType = { from: string; to: string; subject: string; text: string; }; const sendNewEmail = async (email: EmailType) => { emailQueue.add({ ...email }); }; const processEmailQueue = async (job: Job) => { // টিউটোরিয়াল হলে একটি টেস্ট অ্যাকাউন্ট ব্যবহার করুন const testAccount = await nodemailer.createTestAccount(); const transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587, secure: false, auth: { user: testAccount.user, pass: testAccount.pass, }, tls: { rejectUnauthorized: false, }, }); const { from, to, subject, text } = job.data; console.log("Sending mail to %s", to); let info = await transporter.sendMail({ from, to, subject, text, html: `<strong>${text}</strong>`, }); console.log("Message sent: %s", info.messageId); console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info)); }; emailQueue.process(processEmailQueue); app.post("/send-email", async (req, res) => { const { from, to, subject, text } = req.body; await sendNewEmail({ from, to, subject, text }); console.log("Added to queue"); res.json({ message: "Email Sent", }); }); app.listen(4300, () => { console.log("Server started at https://localhost:4300"); }); 

একবার সেভ করলে, আপনি দেখবেন সার্ভার রিস্টার্ট হয়েছে এবং তাৎক্ষণিক ইমেইল পাঠাতে শুরু করেছে। এটি হয় কারণ ওয়ার্কার কিউটি দেখে এবং অবিলম্বে প্রসেসিং শুরু করে।

Node.js ও রেডিস দিয়ে মেসেজ কিউ মাস্টার করুন: ওয়েব অ্যাপ পারফরম্যান্স বাড়ান Server sending out queued emails

এখন, প্রোডিউসার এবং ওয়ার্কার দুটোই এক্টিভ। প্রতিটি নতুন API রিকোয়েস্ট কিউতে পুশ হবে, এবং ওয়ার্কার তা অবিলম্বে প্রসেস করবে যদি না কিছু পেন্ডিং জব থাকে।

সারসংক্ষেপ

আশা করি এই আর্টিকেল আপনাকে বুঝতে সাহায্য করলো মেসেজ কিউ কী, কীভাবে জব যোগ করা এবং প্রসেস তৈরি করা যায়, এবং কীভাবে আপনি সেগুলো ব্যবহার করে বেটার ওয়েব অ্যাপ্লিকেশন বিল্ড করতে পারেন। আপনি এই আর্টিকেলে ব্যবহৃত কোড ফাইলগুলো GitHub-এ পাবেন।

আপনার কোনো প্রশ্ন বা প্রাসঙ্গিক পরামর্শ থাকলে, আমার সাথে যোগাযোগ করুন সেগুলো শেয়ার করার জন্য।

আরও আমার আর্টিকেল পড়তে বা আমার কাজ ফলো করতে, আপনি লিংকডইন, টুইটার, এবং গিটহাবে আমার সাথে কানেক্ট होতে পারেন। এটি দ্রুত, সহজ, এবং ফ্রি!

নিঃশুল্ক কোডিং শিখুন। freeCodeCamp-এর ওপেন সোর্স ক্যুরিকুলাম ৪০,০০০ এর অধিক মানুষকে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন


  1. পাইথনে বাইনারি ট্রির দিয়ে गये ভার্টিকাল লেভেল সর্টেড কিনা চেক করা

  2. Redis পারফরম্যান্স 습득: কমান্ড ল্যাটেন্সি-তে গভীর ডাইভ

  3. HTML5 জিওলোকেশন API গুগল ম্যাপসের সাথে ব্যবহার

  4. Matplotlib-এ অক্ষ লিমিট সেট করলে প্যাডিং সংরক্ষণ করা