Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

क्लाउड टास्क के साथ कतारबद्ध कार्य

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

टास्क क्यू फ़ंक्शंस Google क्लाउड टास्क का लाभ उठाते हैं ताकि आपके ऐप को आपके मुख्य एप्लिकेशन फ्लो के बाहर, समय लेने वाली, संसाधन-गहन, या बैंडविड्थ-सीमित कार्यों को एसिंक्रोनस रूप से चलाने में मदद मिल सके।

उदाहरण के लिए, कल्पना करें कि आप छवि फ़ाइलों के एक बड़े सेट का बैकअप बनाना चाहते हैं जो वर्तमान में एक दर सीमा के साथ एपीआई पर होस्ट किए गए हैं। उस एपीआई का जिम्मेदार उपभोक्ता बनने के लिए, आपको उनकी दर सीमाओं का सम्मान करना होगा। साथ ही, इस तरह का लंबे समय तक चलने वाला काम टाइमआउट और मेमोरी सीमा के कारण विफलता की चपेट में आ सकता है।

इस जटिलता को कम करने के लिए, आप एक कार्य कतार फ़ंक्शन लिख सकते हैं जो मूल कार्य विकल्प जैसे scheduleTime और dispatchDeadline सेट करता है, और फिर फ़ंक्शन को क्लाउड टास्क में एक कतार में सौंप देता है। क्लाउड कार्य परिवेश को विशेष रूप से इस प्रकार के संचालन के लिए प्रभावी भीड़ नियंत्रण और पुन: प्रयास नीतियों को सुनिश्चित करने के लिए डिज़ाइन किया गया है।

फायरबेस v3.20.1 और उच्चतर के लिए क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके, फायरबेस एडमिन एसडीके v10.2.0 और उच्चतर के साथ कार्य कतार कार्यों का समर्थन करने के लिए इंटरऑपरेट करता है।

Firebase के साथ टास्क क्यू फ़ंक्शंस का उपयोग करने से क्लाउड टास्क प्रोसेसिंग के लिए शुल्क लग सकता है। अधिक जानकारी के लिए क्लाउड कार्य मूल्य निर्धारण देखें।

कार्य कतार कार्य बनाना

कार्य कतार कार्यों का उपयोग करने के लिए, इस कार्यप्रवाह का पालन करें:

  1. क्लाउड फ़ंक्शंस के लिए फायरबेस एसडीके का उपयोग करके एक कार्य कतार फ़ंक्शन लिखें।
  2. फायरबेस लोकल एमुलेटर सूट का उपयोग करके अपने कार्यों का परीक्षण करें।
  3. Firebase CLI के साथ अपना फ़ंक्शन परिनियोजित करें। पहली बार आपके कार्य कतार फ़ंक्शन को परिनियोजित करते समय, CLI आपके स्रोत कोड में निर्दिष्ट विकल्पों (दर सीमित और पुनः प्रयास) के साथ क्लाउड कार्य में एक कार्य कतार बनाएगा।
  4. नई बनाई गई कार्य कतार में कार्य जोड़ें, यदि आवश्यक हो तो निष्पादन शेड्यूल सेट करने के लिए मापदंडों के साथ गुजर रहा है। आप इसे व्यवस्थापक SDK का उपयोग करके कोड लिखकर और Firebase के लिए Cloud Functions में परिनियोजित करके प्राप्त कर सकते हैं।

लेखन कार्य कतार कार्य

कार्य कतार कार्यों को लिखना शुरू करने के लिए onDispatch का उपयोग करें। कार्य कतार फ़ंक्शन लिखने का एक महत्वपूर्ण हिस्सा प्रति-कतार पुनर्प्रयास और दर-सीमित कॉन्फ़िगरेशन सेट करना है। इस पृष्ठ में कोड के नमूने एक ऐप पर आधारित हैं जो एक ऐसी सेवा सेट करता है जो नासा के एस्ट्रोनॉमी पिक्चर ऑफ द डे से सभी छवियों का बैकअप लेती है:

कार्य कतार विन्यास

टास्क क्यू फ़ंक्शंस कॉन्फ़िगरेशन सेटिंग्स के एक शक्तिशाली सेट के साथ आते हैं जो रेट सीमा को ठीक से नियंत्रित करते हैं और कार्य कतार के व्यवहार को पुनः प्रयास करते हैं:

exports.backupApod = functions
    .runWith( {secrets: ["NASA_API_KEY"]})
    .tasks.taskQueue({
      retryConfig: {
        maxAttempts: 5,
        minBackoffSeconds: 60,
      },
      rateLimits: {
        maxConcurrentDispatches: 6,
      },
    }).onDispatch(async (data) => {
  • retryConfig.maxAttempts=5 : कार्य कतार में प्रत्येक कार्य स्वचालित रूप से 5 बार तक पुन: प्रयास किया जाता है। यह नेटवर्क त्रुटियों या किसी आश्रित, बाहरी सेवा की अस्थायी सेवा व्यवधान जैसी क्षणिक त्रुटियों को कम करने में मदद करता है।
  • retryConfig.minBackoffSeconds=60 : प्रत्येक कार्य को प्रत्येक प्रयास के अलावा कम से कम 60 सेकंड के लिए पुनः प्रयास किया जाता है। यह प्रत्येक प्रयास के बीच एक बड़ा बफर प्रदान करता है इसलिए हम 5 पुन: प्रयास प्रयासों को बहुत जल्दी समाप्त करने में जल्दबाजी नहीं करते हैं।
  • rateLimits.maxConcurrentDispatch=6 : एक निश्चित समय में अधिकतम 6 कार्य भेजे जाते हैं। यह अंतर्निहित फ़ंक्शन के लिए अनुरोधों की एक स्थिर धारा सुनिश्चित करने में मदद करता है और सक्रिय उदाहरणों की संख्या को कम करने और ठंड शुरू होने में मदद करता है।

Firebase स्थानीय एमुलेटर सूट का उपयोग करके परीक्षण कार्य कतार कार्य

फायरबेस लोकल एमुलेटर सूट में टास्क क्यू फंक्शन्स को साधारण एचटीटीपी फंक्शन के रूप में उजागर किया जाता है। आप एक जेसन डेटा पेलोड के साथ एक HTTP पोस्ट अनुरोध भेजकर एक नकली कार्य फ़ंक्शन का परीक्षण कर सकते हैं:

 # start the Firebase Emulators
 firebase emulators:start

 # trigger the emulated task queue function
 curl \
  -X POST                                            # An HTTP POST request...
  -H "content-type: application/json" \              # ... with a JSON body
  http://localhost:$PORT/$PROJECT_ID/$REGION/$NAME \ # ... to function url
  -d '{"data": { ... some data .... }}'              # ... with JSON encoded data

कार्य कतार फ़ंक्शन को परिनियोजित करना

Firebase CLI का उपयोग करके कार्य कतार फ़ंक्शन को परिनियोजित करें:

$ firebase deploy --only functions:backupApod

पहली बार किसी कार्य कतार फ़ंक्शन को परिनियोजित करते समय, CLI आपके स्रोत कोड में निर्दिष्ट विकल्पों (दर सीमित और पुनः प्रयास) के साथ क्लाउड कार्य में एक कार्य कतार बनाता है।

यदि आप फ़ंक्शन को परिनियोजित करते समय अनुमति त्रुटियों का सामना करते हैं, तो सुनिश्चित करें कि परिनियोजन आदेश चलाने वाले उपयोगकर्ता को उपयुक्त IAM भूमिकाएँ असाइन की गई हैं।

फ़ंक्शन को कतारबद्ध करें

नोड.जेएस के लिए फायरबेस एडमिन एसडीके का उपयोग करके फायरबेस के लिए क्लाउड फ़ंक्शंस जैसे विश्वसनीय सर्वर वातावरण से क्लाउड टास्क में टास्क क्यू फ़ंक्शन को एनक्यू किया जा सकता है। यदि आप व्यवस्थापक SDK के लिए नए हैं, तो प्रारंभ करने के लिए सर्वर में Firebase जोड़ें देखें।

एक सामान्य प्रवाह में, व्यवस्थापक SDK एक नया कार्य बनाता है, उसे {cloudtasks_name}} में संलग्न करता है, और कार्य के लिए कॉन्फ़िगरेशन सेट करता है:

exports.enqueueBackupTasks = functions.https.onRequest(
async (_request, response) => {
  const queue = getFunctions().taskQueue("backupApod");
  const enqueues = [];
  for (let i = 0; i <= 10; i += 1) {
    // Enqueue each task with i*60 seconds day. Our task queue function
    // should process ~1 task/min.
    const scheduleDelaySeconds = i * 60 
    enqueues.push(
        queue.enqueue(
          { id: `task-${i}` },
          {
            scheduleDelaySeconds,
            dispatchDeadlineSeconds: 60 * 5 // 5 minutes
          },
        ),
    );
  }
  await Promise.all(enqueues);
  response.sendStatus(200);

});
  • scheduleDelaySeconds : नमूना कोड Nवें कार्य के लिए Nth मिनट की देरी को जोड़कर कार्यों के निष्पादन को फैलाने का प्रयास करता है। यह ~ 1 कार्य/मिनट को ट्रिगर करने के लिए अनुवाद करता है। ध्यान दें कि यदि आप क्लाउड कार्य किसी विशिष्ट समय पर कार्य को ट्रिगर करना चाहते हैं तो आप scheduleTime का भी उपयोग कर सकते हैं।
  • dispatchDeadlineSeconds : अधिकतम समय क्लाउड कार्य किसी कार्य के पूरा होने की प्रतीक्षा करेगा। क्लाउड कार्य कतार के पुन: प्रयास कॉन्फ़िगरेशन के बाद या इस समय सीमा तक पहुंचने तक कार्य का पुन: प्रयास करेगा। नमूने में, कार्य को 5 बार तक पुन: प्रयास करने के लिए कतार को कॉन्फ़िगर किया गया है, लेकिन यदि पूरी प्रक्रिया (पुन: प्रयास सहित) में 5 मिनट से अधिक समय लगता है, तो कार्य स्वचालित रूप से रद्द हो जाता है।

समस्या निवारण

क्लाउड टास्क लॉगिंग चालू करें

क्लाउड टास्क के लॉग में उपयोगी डायग्नोस्टिक जानकारी होती है, जैसे किसी टास्क से जुड़े अनुरोध की स्थिति। डिफ़ॉल्ट रूप से, क्लाउड टास्क के लॉग बंद हो जाते हैं क्योंकि लॉग की बड़ी मात्रा आपके प्रोजेक्ट पर संभावित रूप से उत्पन्न हो सकती है। हम अनुशंसा करते हैं कि जब आप सक्रिय रूप से अपने कार्य कतार कार्यों को विकसित और डिबग कर रहे हों तो आप डीबग लॉग चालू करें। लॉगिंग चालू करना देखें।

आईएएम अनुमतियां

कार्यों को कतारबद्ध करते समय या जब क्लाउड कार्य आपके कार्य कतार कार्यों को लागू करने का प्रयास करते हैं, तो आपको PERMISSION DENIED त्रुटियां दिखाई दे सकती हैं। सुनिश्चित करें कि आपके प्रोजेक्ट में निम्नलिखित IAM बाइंडिंग हैं:

  • क्लाउड टास्क में टास्क को एनक्यू करने के लिए इस्तेमाल की जाने वाली पहचान के लिए क्लाउड cloudtasks.tasks.create की जरूरत होती है। आईएएम अनुमति बनाएं।

    नमूने में, यह ऐप इंजन डिफ़ॉल्ट सेवा खाता है

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer
  • क्लाउड टास्क में टास्क को एनक्यू करने के लिए इस्तेमाल की जाने वाली पहचान को क्लाउड टास्क में टास्क से जुड़े सर्विस अकाउंट का इस्तेमाल करने के लिए अनुमति की जरूरत होती है।

    नमूने में, यह ऐप इंजन डिफ़ॉल्ट सेवा खाता है

ऐप इंजन डिफ़ॉल्ट सेवा खाते को ऐप इंजन डिफ़ॉल्ट सेवा खाते के उपयोगकर्ता के रूप में जोड़ने के निर्देशों के लिए Google क्लाउड IAM दस्तावेज़ देखें।

  • कार्य कतार फ़ंक्शन को ट्रिगर करने के लिए उपयोग की जाने वाली पहचान को cloudfunctions.functions.invoke अनुमति की आवश्यकता होती है।

    नमूने में, यह ऐप इंजन डिफ़ॉल्ट सेवा खाता है

gcloud functions add-iam-policy-binding $FUNCTION_NAME \
  --region=us-central1 \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudfunctions.invoker