1. ভূমিকা
ওভারভিউ
কর্মী পুল হল একটি ক্লাউড রান রিসোর্স যা বিশেষভাবে অ-অনুরোধ ওয়ার্কলোডের জন্য ডিজাইন করা হয়েছে, যেমন পুল সারি। মনে রাখবেন যে কর্মী পুলগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি নেই:
- কোন এন্ডপয়েন্ট/URL নেই
- একটি বন্দরে অনুরোধ শোনার জন্য নিয়োজিত কন্টেইনারের জন্য কোন প্রয়োজন নেই
- কোন স্বয়ংক্রিয় স্কেলিং
এই কোডল্যাবে, আপনি একটি কর্মী পুল তৈরি করবেন যা একটি পাব/সাব পুল সাবস্ক্রিপশন থেকে ক্রমাগত বার্তাগুলি পুনরুদ্ধার করবে। আপনি ডকুমেন্টেশনে এবং এই কোড উদাহরণে পাব/সাব পুল সাবস্ক্রিপশন সম্পর্কে আরও জানতে পারেন।
আপনি কি শিখবেন
- কিভাবে একটি ক্লাউড রান কর্মী পুলে তৈরি এবং স্থাপন করা যায়
- কীভাবে একটি পুল-ভিত্তিক পাব/সাবস্ক্রিপশন থেকে বার্তাগুলি পুনরুদ্ধার করবেন
2. সেটআপ এবং প্রয়োজনীয়তা
প্রথমে, এই কোডল্যাবের জন্য পরিবেশ ভেরিয়েবল সেট করুন:
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'
3. ক্লাউড রান কর্মী পুল তৈরি করুন
প্রথমে, আপনার কর্মী পুল কোডের জন্য একটি ডিরেক্টরি তৈরি করুন:
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 = 'pull-pubsub-topic';
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.
4. কর্মী পুল স্থাপন
নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড রান ওয়ার্কার পুল তৈরি করুন:
gcloud beta run worker-pools deploy $WORKER_POOL_NAME --region=$REGION --source .
এই কমান্ডটি উত্স থেকে চিত্র তৈরি করে এবং কাজটি স্থাপন করে। এটি সম্পূর্ণ হতে কয়েক মিনিট সময় লাগবে।
5. PubSub-এ একটি বার্তা প্রকাশ করুন৷
একটি PubSub বিষয় তৈরি করুন
gcloud pubsub topics create $TOPIC
একটি PubSub পুল সদস্যতা তৈরি করুন
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
দেখতে হবে।
6. কর্মী পুল মুছুন
যেহেতু কর্মী পুলগুলি অবিচ্ছিন্নভাবে চলে, আপনার কর্মী পুলটি মুছে ফেলা উচিত।
gcloud beta run worker-pools delete $WORKER_POOL_NAME --region $REGION
7. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!
আমরা ক্লাউড রান ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা কভার করেছি কি
- কিভাবে একটি ক্লাউড রান কর্মী পুলে তৈরি এবং স্থাপন করা যায়
- কীভাবে একটি পুল-ভিত্তিক পাব/সাবস্ক্রিপশন থেকে বার্তাগুলি পুনরুদ্ধার করবেন
8. পরিষ্কার করুন
ক্লাউড রান ওয়ার্কার পুল মুছতে, https://console.cloud.google.com/run-এ ক্লাউড রান ক্লাউড কনসোলে যান এবং codelab-workers-pubsub
ওয়ার্কার পুলটি মুছুন।
সম্পূর্ণ প্রজেক্ট মুছে ফেলতে, ম্যানেজ রিসোর্সেস এ যান, ধাপ 2 এ আপনার তৈরি করা প্রজেক্টটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন। আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud projects list
চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।