১. ভূমিকা
সংক্ষিপ্ত বিবরণ
ওয়ার্কার পুল হলো ক্লাউড রানের একটি রিসোর্স যা বিশেষভাবে পুল কিউ-এর মতো নন-রিকোয়েস্ট ওয়ার্কলোডের জন্য ডিজাইন করা হয়েছে। উল্লেখ্য যে, ওয়ার্কার পুলে নিম্নলিখিত ফিচারগুলো নেই:
- কোন এন্ডপয়েন্ট/ইউআরএল নেই
- স্থাপন করা কন্টেইনারটির কোনো পোর্টে অনুরোধ শোনার প্রয়োজন নেই।
- স্বয়ংক্রিয় স্কেলিং নেই
এই কোডল্যাবে, আপনি একটি ওয়ার্কার পুল তৈরি করবেন যা একটি পাব/সাব পুল সাবস্ক্রিপশন থেকে ক্রমাগত মেসেজ সংগ্রহ করবে। আপনি ডকুমেন্টেশনে এবং এই কোড উদাহরণটিতে পাব/সাব পুল সাবস্ক্রিপশন সম্পর্কে আরও জানতে পারবেন।
আপনি যা শিখবেন
- ক্লাউড রান ওয়ার্কার পুলে কীভাবে তৈরি এবং স্থাপন করবেন
- পুল-ভিত্তিক পাব/সাব সাবস্ক্রিপশন থেকে মেসেজ পুনরুদ্ধার করার উপায়
২. সেটআপ এবং প্রয়োজনীয়তা
প্রথমে, এই কোডল্যাবের জন্য এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:
export PROJECT_ID=<your_project_id>
export REGION=<your_region>
export WORKER_POOL_NAME=codelab-workers-pubsub
export SERVICE_ACCOUNT=worker-pools-sa
export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
export TOPIC=pull-pubsub-topic
এরপর, আপনার প্রজেক্ট আইডি ব্যবহার করার জন্য gcloud কনফিগার করুন।
gcloud config set project $PROJECT_ID
এই কোডল্যাবটি ব্যবহার শুরু করার আগে, নিম্নলিখিত API-গুলি সক্রিয় করতে রান করুন:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
pubsub.googleapis.com
নিম্নলিখিত কমান্ডটি চালিয়ে সার্ভিস অ্যাকাউন্টটি তৈরি করুন:
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
--display-name="Service account for worker pool codelab"
সবশেষে, আপনার ক্লাউড রান সার্ভিস অ্যাকাউন্টকে পাবসাব (PubSub)-এ অ্যাক্সেস দিন:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role='roles/pubsub.admin'
৩. ক্লাউড রান ওয়ার্কার পুল তৈরি করুন
প্রথমে, আপনার ওয়ার্কার পুল কোডের জন্য ডিরেক্টরি তৈরি করুন:
mkdir codelab-worker-pools
cd codelab-worker-pools
এরপর, package.json নামে একটি ফাইল তৈরি করুন।
{
"name": "codelab-worker-pools",
"version": "1.0.0",
"description": "A codelab example of a Cloud Run worker pool retrieving messages from a Pull-based PubSub subscription",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"engines": {
"node": ">=22.0.0"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@google-cloud/pubsub": "^5.1.0"
}
}
এখন, index.js নামে একটি ফাইল তৈরি করুন:
'use strict';
const subscriptionNameOrId = 'codelab-subscription';
const { PubSub } = require('@google-cloud/pubsub');
// Creates a Pub/Sub client; cache this for further use.
const pubSubClient = new PubSub();
// References an existing subscription.
const subscription = pubSubClient.subscription(subscriptionNameOrId);
// This function is called when a shutdown signal is received.
const handleShutdown = async (signal) => {
console.log(`\n${signal} signal caught. Shutting down gracefully...`);
try {
// 1. Stop listening for new messages. The `close()` method returns a Promise.
console.log('Closing Pub/Sub subscription...');
await subscription.close();
console.log('Pub/Sub subscription closed.');
// 2. Add any other cleanup logic here, like closing database connections.
} catch (err) {
console.error('Error during graceful shutdown:', err);
} finally {
console.log('Worker Pool exited.');
process.exit(0);
}
};
// Listen for termination signals.
// SIGINT handles Ctrl+C locally.
// SIGTERM handles signals from services like Cloud Run.
process.on('SIGINT', () => handleShutdown('SIGINT'));
process.on('SIGTERM', () => handleShutdown('SIGTERM'));
// ------------------ Pub/Sub Message Handling ------------------
// Create an event handler to process incoming messages.
const messageHandler = message => {
console.log(`Received message ${message.id}:`);
console.log(`\tData: ${message.data}`);
console.log(`\tAttributes: ${JSON.stringify(message.attributes)}`);
// Ack the message so it is not sent again.
message.ack();
};
// Register the message handler and listen for messages.
subscription.on('message', messageHandler);
console.log(
`Worker started. Listening for messages on "${subscriptionNameOrId}".`
);
console.log('If running locally, press Ctrl+C to quit.');
// The application will now listen for messages indefinitely until a shutdown
// signal is received.
৪. ওয়ার্কার পুল স্থাপন করুন
নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড রান ওয়ার্কার পুল তৈরি করুন:
gcloud beta run worker-pools deploy $WORKER_POOL_NAME \
--region=$REGION \
--source . \
--service-account $SERVICE_ACCOUNT_EMAIL
এই কমান্ডটি সোর্স থেকে ইমেজ তৈরি করে এবং জবটি ডেপ্লয় করে। এটি সম্পন্ন হতে কয়েক মিনিট সময় লাগবে।
৫. PubSub-এ একটি বার্তা প্রকাশ করুন
একটি পাবসাব টপিক তৈরি করুন
gcloud pubsub topics create $TOPIC
একটি পাবসাব পুল সাবস্ক্রিপশন তৈরি করুন
gcloud pubsub subscriptions create codelab-subscription --topic=$TOPIC
আপনার PubSub টপিকে একটি বার্তা প্রকাশ করতে নিম্নলিখিত কমান্ডটি চালান।
gcloud pubsub topics publish $TOPIC --message "Hello Worker Pools"
আপনার কর্মী পুলের লগগুলি পরীক্ষা করুন
gcloud logging read 'resource.type="cloud_run_worker_pool" AND resource.labels.worker_pool_name="'$WORKER_POOL_NAME'" AND resource.labels.location="'$REGION'"' --limit 10
আপনি লগগুলিতে Hello Worker Pools দেখতে পাবেন।
৬. ওয়ার্কার পুলটি মুছে ফেলুন
যেহেতু ওয়ার্কার পুলগুলো অবিরাম চলতে থাকে, তাই আপনার ওয়ার্কার পুলটি মুছে ফেলা উচিত।
gcloud beta run worker-pools delete $WORKER_POOL_NAME --region $REGION
৭. অভিনন্দন!
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!
আমরা ক্লাউড রান ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা যা আলোচনা করেছি
- ক্লাউড রান ওয়ার্কার পুলে কীভাবে তৈরি এবং স্থাপন করবেন
- পুল-ভিত্তিক পাব/সাব সাবস্ক্রিপশন থেকে মেসেজ পুনরুদ্ধার করার উপায়
৮. পরিষ্কার করুন
Cloud Run ওয়ার্কার পুলটি ডিলিট করতে, https://console.cloud.google.com/run-এ অবস্থিত Cloud Run ক্লাউড কনসোলে যান এবং codelab-workers-pubsub ওয়ার্কার পুলটি ডিলিট করুন।
সম্পূর্ণ প্রজেক্টটি ডিলিট করতে, 'Manage Resources'- এ যান, ধাপ ২-এ তৈরি করা প্রজেক্টটি সিলেক্ট করুন এবং 'Delete' বেছে নিন। প্রজেক্টটি ডিলিট করলে, আপনাকে আপনার Cloud SDK-তে প্রজেক্ট পরিবর্তন করতে হবে। gcloud projects list চালিয়ে আপনি সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।