Cloud Tasks के साथ बफ़र एचटीटीपी अनुरोध

1. परिचय

c6ac6ed05292f13e.png

Cloud Tasks, पूरी तरह से मैनेज की जाने वाली एक ऐसी सेवा है जो बड़ी संख्या में टास्क को मैनेज करने, उन्हें भेजने, और डिलीवर करने के लिए इस्तेमाल की जाती है.

Cloud Tasks की मदद से, काम के अलग-अलग हिस्सों को अलग किया जा सकता है. इन्हें टास्क कहा जाता है. इन्हें मुख्य ऐप्लिकेशन फ़्लो से बाहर, स्वतंत्र रूप से पूरा किया जा सकता है. उदाहरण के लिए, डेटाबेस एंट्री को अपडेट करने का टास्क. साथ ही, इन्हें प्रोसेस करने के लिए भेजा जा सकता है. इसके लिए, आपके बनाए गए हैंडलर का इस्तेमाल किया जाता है.

ऑफ़लोड किए गए टास्क को कतार में जोड़ दिया जाता है. यह टास्क तब तक कतार में रहता है, जब तक इसे पूरा नहीं कर लिया जाता या यह पूरा नहीं हो पाता. कॉन्फ़िगरेशन के आधार पर, क्यू को डिस्पैच फ़्लो कंट्रोल के तौर पर भी इस्तेमाल किया जा सकता है. आपको एक सूची बनानी होती है और उसे कॉन्फ़िगर करना होता है. इसके बाद, Cloud Tasks सेवा उस सूची को मैनेज करती है. टास्क जोड़ने के बाद, क्यू उन्हें भेजता है और यह पक्का करता है कि वर्कर उन्हें भरोसेमंद तरीके से प्रोसेस करें.

d59ffe8d34138c88.png

Cloud Tasks की कुछ मुख्य सुविधाएं ये हैं:

  • एचटीटीपी टारगेट: Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions या कंपनी की इमारत में मौजूद सिस्टम पर चल रही किसी भी एचटीटीपी सेवा को टारगेट करने वाले टास्क जोड़ें. इसके लिए, इंडस्ट्री स्टैंडर्ड OAuth/OIDC पुष्टि करने की सुविधा का सुरक्षित तरीके से इस्तेमाल करें.
  • टास्क को डुप्लीकेट होने से रोकना: एक से ज़्यादा बार जोड़े गए टास्क को सिर्फ़ एक बार भेजा जाएगा.
  • डेटा डिलीवर होने की गारंटी: टास्क कम से कम एक बार डिलीवर होने की गारंटी होती है. साथ ही, ज़्यादातर टास्क सिर्फ़ एक बार डिलीवर होते हैं.
  • रेट और फिर से कोशिश करने के कंट्रोल: टास्क भेजे जाने की दर, कोशिशों की ज़्यादा से ज़्यादा संख्या, और कोशिशों के बीच इंतज़ार करने का कम से कम समय सेट करके, टास्क के एक्ज़ीक्यूशन को कंट्रोल करें.
  • आने वाले समय के लिए शेड्यूल करना: इससे यह कंट्रोल किया जा सकता है कि कोई टास्क कब चलाया जाए.

इस कोडलैब में, सबसे पहले आपको एचटीटीपी टारगेट टास्क के लिए, सामान्य Cloud Tasks की कतार बनाने और उसका इस्तेमाल करने का तरीका बताया जाएगा. इसके बाद, आपको Cloud Tasks की मदद से एचटीटीपी अनुरोधों को आसानी से बफ़र करने के लिए, Queue-level HTTP URI override और नए BufferTask API का इस्तेमाल करने का तरीका बताया जाएगा.

आपको क्या सीखने को मिलेगा

  • एचटीटीपी टारगेट टास्क बनाने का तरीका.
  • नए क्यू-लेवल एचटीटीपी यूआरआई ओवरराइड की मदद से, एचटीटीपी टारगेट टास्क बनाने का तरीका.
  • नए क्यू-लेवल के एचटीटीपी यूआरआई ओवरराइड का इस्तेमाल करके, लंबित टास्क को कैसे बदला जाए.
  • BufferTask API की मदद से, एचटीटीपी अनुरोधों को आसानी से बफ़र करने का तरीका.

2. सेटअप और ज़रूरी शर्तें

अपनी स्पीड से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते हैं. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो आपके पास कोई दूसरा रैंडम आईडी जनरेट करने का विकल्प होता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग की सुविधा चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को शट डाउन करें. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मुफ़्त में आज़माने का प्रोग्राम मिलता है.

Cloud Shell शुरू करना

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगते हैं. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

3. एचटीटीपी टारगेट टास्क के लिए, सामान्य कतार बनाना

पहले चरण में, आपको Cloud Tasks की सामान्य कतार बनाने का तरीका बताया जाएगा. साथ ही, इसमें Cloud Run सेवा को टारगेट करने के लिए, एचटीटीपी टास्क जोड़ने का तरीका बताया जाएगा.

d4f09a342c8eab.png

एचटीटीपी टारगेट टास्क क्या हैं?

एचटीटीपी टारगेट टास्क, Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions या कंपनी की इमारत में मौजूद सिस्टम पर चल रही किसी भी एचटीटीपी सेवा को टारगेट कर सकते हैं. इसके लिए, इंडस्ट्री स्टैंडर्ड OAuth/OIDC ऑथेंटिकेशन का सुरक्षित तरीके से इस्तेमाल किया जाता है.

Cloud Run सेवा डिप्लॉय करना

सबसे पहले, पक्का करें कि ज़रूरी एपीआई चालू हों:

gcloud services enable \
  cloudtasks.googleapis.com \
  run.googleapis.com

Cloud Run की ऐसी सेवा डिप्लॉय करें जो एचटीटीपी टास्क के टारगेट के तौर पर काम करेगी:

SERVICE1=hello1
REGION=us-central1

gcloud run deploy $SERVICE1 \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

Cloud Tasks की कतार बनाना

Cloud Tasks की सामान्य कतार बनाएं:

QUEUE1=http-queue
LOCATION=us-central1

gcloud tasks queues create $QUEUE1 --location=$LOCATION

कुछ समय के लिए, टास्क की सूची को रोकें, ताकि एचटीटीपी टास्क को बनाते समय उनकी निगरानी की जा सके:

gcloud tasks queues pause $QUEUE1 --location=$LOCATION

4. एचटीटीपी टास्क बनाना और उसे टेस्ट करना

इस चरण में, आपको एक एचटीटीपी टास्क बनाना होगा, ताकि उस क्यू को टारगेट किया जा सके जिसे आपने पहले बनाया था.

एचटीटीपी टास्क बनाना

gcloud का इस्तेमाल करके, एचटीटीपी टास्क बनाए जा सकते हैं:

gcloud tasks create-http-task \
    --queue=$QUEUE1 \
    --location=$LOCATION \
    --url=$SERVICE1_URL \
    --method=GET

ज़रूरी नहीं: क्लाइंट लाइब्रेरी की मदद से, एचटीटीपी टास्क भी बनाया जा सकता है. उदाहरण के लिए, C# के सैंपल के लिए Program.cs देखें. इसमें एचटीटीपी अनुरोध को Task और TaskRequest में रैप किया गया है. इसके बाद, इसे CloudTasksClient की मदद से Cloud Tasks पर भेजा गया है:

var taskRequest = new CreateTaskRequest
{
    Parent = new QueueName(projectId, location, queue).ToString(),
    Task = new Task
    {
        HttpRequest = new HttpRequest
        {
            HttpMethod = HttpMethod.Get,
            Url = url
        }
    }
};

var client = CloudTasksClient.Create();
var response = client.CreateTask(taskRequest);

टास्क बनाने और उसे कतार में जोड़ने के लिए, इसे इस तरह रन करें:

dotnet run $PROJECT_ID $LOCATION $QUEUE1 $SERVICE1_URL

एचटीटीपी टास्क की जांच करना

इस समय, टास्क बन जाता है, लेकिन इसे अभी तक पूरा नहीं किया गया है, क्योंकि कतार को रोक दिया गया है. कतारों की सूची बनाकर, इसकी पुष्टि की जा सकती है:

gcloud tasks queues list --location=$LOCATION

आपको कतार की स्थिति PAUSED दिखेगी:

QUEUE_NAME  STATE
http-queue  PAUSED

सूची में मौजूद गाने फिर से चलाएं:

gcloud tasks queues resume $QUEUE --location=$LOCATION

Cloud Run सेवा के लॉग देखें:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1

आपको दिखेगा कि Cloud Run सेवा को Cloud Tasks से एचटीटीपी जीईटी अनुरोध मिला है:

httpRequest:
  latency: 0.227597158s
  protocol: HTTP/1.1
  remoteIp: 35.243.23.192
  requestMethod: GET
  requestSize: '415'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.32.53
  status: 200
  userAgent: Google-Cloud-Tasks

5. रूटिंग कॉन्फ़िगरेशन वाली कोई कतार बनाना

इस चरण में, आपको राउटिंग कॉन्फ़िगरेशन वाली Cloud Tasks की एक ऐसी कतार बनाने का तरीका बताया जाएगा जिसमें कतार-लेवल पर टास्क राउटिंग कॉन्फ़िगरेशन सुविधा का इस्तेमाल करके, एचटीटीपी यूआरआई को बदला जा सके. इसके बाद, इसमें एचटीटीपी टास्क जोड़े जाएंगे, ताकि पहली Cloud Run सेवा को टारगेट किया जा सके. साथ ही, यह देखा जा सके कि राउटिंग कॉन्फ़िगरेशन, यूआरआई को बदलकर टास्क को दूसरी Cloud Run सेवा पर भेजता है.

5d1ec61a933f77.png

कतार के लेवल पर टास्क राउटिंग कॉन्फ़िगरेशन क्या होता है?

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

नीचे दिए गए कॉन्फ़िगरेशन को, क्यू-लेवल पर सेट किया जा सकता है:

  • हेडर: अगर क्यू-लेवल पर हेडर तय किए जाते हैं, तो क्यू-लेवल के हेडर, क्यू में मौजूद सभी टास्क के लिए हेडर को अपसर्ट करेंगे.
  • एचटीटीपी मेथड: अगर एचटीटीपी मेथड को क्यू-लेवल पर तय किया जाता है, तो यह क्यू में मौजूद सभी टास्क के लिए एचटीटीपी मेथड को बदल देगा.
  • टारगेट यूआरआई: होस्ट, पाथ, क्वेरी, पोर्ट, और स्कीम (एचटीटीपी या एचटीटीपीएस) को अलग-अलग तौर पर बदला जा सकता है.
  • अनुमति: अगर ओआईडीसी/OAuth कॉन्फ़िगरेशन को क्यू-लेवल पर सेट किया जाता है, तो यह टास्क-लेवल के ओआईडीसी/OAuth कॉन्फ़िगरेशन को बदल देगा.

दूसरी Cloud Run सेवा डिप्लॉय करना

दूसरी Cloud Run सेवा डिप्लॉय करें. यह बाद में एचटीटीपी यूआरआई को बदलने के लिए टारगेट के तौर पर काम करेगी:

SERVICE2=hello2
REGION=us-central1

gcloud run deploy $SERVICE2 \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

सेवा के यूआरएल के होस्ट को बाद में इस्तेमाल करने के लिए सेव करें:

SERVICE2_URL=$(gcloud run services describe $SERVICE2 --region $REGION --format 'value(status.url)')
SERVICE2_HOST=$(echo $SERVICE2_URL | sed 's,http[s]*://,,g')

रूटिंग कॉन्फ़िगरेशन के साथ Cloud Tasks की एक कतार बनाना

दूसरी Cloud Run सेवा के लिए, एचटीटीपी यूआरआई को बदलने की सुविधा के साथ रूटिंग कॉन्फ़िगरेशन वाली एक कतार बनाएं.

QUEUE2=http-queue-uri-override

gcloud beta tasks queues create $QUEUE2 \
  --http-uri-override=host:$SERVICE2_HOST \
  --location=$LOCATION

ध्यान दें कि यूआरआई ओवरराइड का मतलब दूसरी Cloud Run सेवा से है. अगर कोई एचटीटीपी टास्क, सूची में जोड़ा जाता है, तो उसके ओरिजनल यूआरआई होस्ट को बदल दिया जाएगा. आपको कतार का कॉन्फ़िगरेशन दिखेगा:

gcloud beta tasks queues describe $QUEUE2 --location=$LOCATION

आपको दिखेगा कि httpTarget में एक uriOverride है, जो दूसरी सेवा के होस्ट की ओर इशारा करता है:

httpTarget:
  uriOverride:
    host: hello2-idcwffc3yq-uc.a.run.app
    pathOverride: {}
    queryOverride: {}
...

कतार को कुछ समय के लिए रोकें, ताकि एचटीटीपी टास्क को बनाते समय उनकी निगरानी की जा सके:

gcloud tasks queues pause $QUEUE2 --location=$LOCATION

6. रूटिंग कॉन्फ़िगरेशन के साथ, क्यू के लिए एचटीटीपी टास्क बनाएं और उसकी जांच करें

इस चरण में, पहली सेवा को टारगेट करने के लिए एक एचटीटीपी टास्क बनाया जाएगा. साथ ही, यह देखा जाएगा कि कतार ने इसके यूआरआई को दूसरी सेवा की ओर पॉइंट करने के लिए बदल दिया है.

एचटीटीपी टास्क बनाना

पहली सेवा के यूआरएल का इस्तेमाल करके, एचटीटीपी टास्क बनाएं:

gcloud tasks create-http-task \
    --queue=$QUEUE2 \
    --location=$LOCATION \
    --url=$SERVICE1_URL \
    --method=GET

एचटीटीपी टास्क की जांच करना

सूची में मौजूद गाने फिर से चलाएं:

gcloud tasks queues resume $QUEUE2 --location=$LOCATION

आपको दिखेगा कि दूसरी (पहली नहीं) Cloud Run सेवा को Cloud Tasks से एचटीटीपी जीईटी अनुरोध मिला है. ऐसा इसलिए हुआ, क्योंकि आपने अनुरोध को बदल दिया था:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE2" --limit 1
---
httpRequest:
  latency: 0.228982142s
  protocol: HTTP/1.1
  remoteIp: 35.187.132.84
  requestMethod: GET
  requestSize: '426'
  requestUrl: https://hello2-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.34.53
  status: 200
  userAgent: Google-Cloud-Tasks

7. रूटिंग कॉन्फ़िगरेशन के साथ, लंबित टास्क बदलना

रूटिंग कॉन्फ़िगरेशन का इस्तेमाल करके, किसी क्यू में मौजूद सभी टास्क के एचटीटीपी यूआरआई को भी बदला जा सकता है. यह तब काम आता है, जब बैकएंड सेवा काम नहीं कर रही हो और आपको तुरंत किसी दूसरी सेवा पर रीडायरेक्ट करना हो. आइए, इस चरण में देखते हैं कि यह कैसे काम करता है.

कतार को फिर से रोकें:

gcloud tasks queues pause $QUEUE2 --location=$LOCATION

टास्क यूआरएल के तौर पर google.com का इस्तेमाल करके, एचटीटीपी टास्क बनाएं:

gcloud tasks create-http-task \
    --queue=$QUEUE2 \
    --location=$LOCATION \
    --url=https://www.google.com \
    --method=GET

टास्क को अभी तक मंज़ूरी नहीं मिली है, क्योंकि कतार को रोक दिया गया है.

अब, एचटीटीपी यूआरआई ओवरराइड को पहली सेवा पर ले जाने के लिए अपडेट करें. इससे, google.com से पहली सेवा के होस्ट पर, टास्क के होस्ट को बदला जा सकेगा:

SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)')
SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g')

gcloud beta tasks queues update $QUEUE2 \
  --http-uri-override=host:$SERVICE1_HOST \
  --location=$LOCATION

सूची में मौजूद गाने फिर से चलाएं:

gcloud tasks queues resume $QUEUE2 --location=$LOCATION

आपको दिखेगा कि पहली Cloud Run सेवा को Cloud Tasks से एचटीटीपी जीईटी अनुरोध मिला है. ऐसा ओवरराइड की वजह से हुआ है (google.com के बजाय):

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1
---
httpRequest:
  latency: 0.228982142s
  protocol: HTTP/1.1
  remoteIp: 35.187.132.84
  requestMethod: GET
  requestSize: '426'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.34.53
  status: 200
  userAgent: Google-Cloud-Tasks

8. BufferTask API के लिए एक सूची बनाएं

आम तौर पर, gcloud या Tasks की क्लाइंट लाइब्रेरी से Tasks API का इस्तेमाल करके टास्क बनाए जाते हैं. इससे ऐप्लिकेशन पर, क्लाइंट लाइब्रेरी का इस्तेमाल करके एचटीटीपी अनुरोधों को टास्क में रैप करने का बोझ पड़ता है. साथ ही, यह ऐप्लिकेशन और Tasks क्लाइंट लाइब्रेरी के बीच डिपेंडेंसी भी पैदा करता है.

इस चरण में, आपको यह पता चलेगा कि एचटीटीपी अनुरोध भेजकर, एचटीटीपी टारगेट टास्क को आसानी से बनाने के लिए, क्यू-लेवल एचटीटीपी यूआरआई ओवरराइड और नए BufferTask API का इस्तेमाल कैसे किया जाता है. अब एचटीटीपी अनुरोध भेजने वाला कोई भी ऐप्लिकेशन, एचटीटीपी टारगेट टास्क बना सकता है.

b1606516297fc4b6.png

BufferTask API क्या है?

CreateTask API, टास्क बनाने का पुराना तरीका है. इसके लिए, क्लाइंट को एपीआई में एक टास्क ऑब्जेक्ट भेजना होता है. साथ ही, सभी ज़रूरी फ़ील्ड सेट करने होते हैं.

BufferTask API एक नई सुविधा है. इसकी मदद से उपयोगकर्ता, टास्क कॉन्फ़िगरेशन (एचटीटीपी यूआरएल, हेडर, अनुमति) दिए बिना ही एचटीटीपी टास्क बना सकते हैं. इससे आपको Buffer API को सिर्फ़ एक मैसेज या अनुरोध का मुख्य हिस्सा भेजने की सुविधा मिलती है.

इससे सेवाओं के साथ आसानी से इंटिग्रेट किया जा सकता है, क्योंकि Cloud Tasks को अब आपकी सेवा के सामने डिप्लॉय किया जा सकता है. इसके लिए, क्लाइंट-साइड पर कोड में कोई बदलाव करने की ज़रूरत नहीं होती. BufferTask API को भेजा गया कोई भी एचटीटीपी अनुरोध, Task ऑब्जेक्ट के तौर पर रैप किया जाएगा. इसके बाद, इसे कतार के लेवल पर सेट किए गए डेस्टिनेशन पर डिलीवर किया जाएगा.

BufferTask API का इस्तेमाल करने के लिए, ज़रूरी है कि टारगेट यूआरआई कॉन्फ़िगरेशन सेट किया गया हो. दूसरे शब्दों में कहें, तो कतार-लेवल पर राउटिंग कॉन्फ़िगरेशन सुविधा, BufferTask API का इस्तेमाल करने के लिए ज़रूरी है.

रूटिंग कॉन्फ़िगरेशन के साथ Cloud Tasks की कतार बनाना

एक ऐसी कतार बनाएं जिसमें राउटिंग कॉन्फ़िगरेशन हो. यह कॉन्फ़िगरेशन, उस पहली सेवा की ओर इशारा करता हो जिसे हमने पिछले चरण में डिप्लॉय किया था:

SERVICE1=hello1
SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)')
SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g')
QUEUE3=http-queue-uri-override-buffer

gcloud beta tasks queues create $QUEUE3 \
  --http-uri-override=host:$SERVICE1_HOST \
  --location=$LOCATION

कतार को कुछ समय के लिए रोकें, ताकि एचटीटीपी टास्क को बनाते समय उनकी निगरानी की जा सके:

gcloud tasks queues pause $QUEUE3 --location=$LOCATION

9. BufferTask API की मदद से, एचटीटीपी अनुरोधों को बफ़र करना

इस चरण में, BufferTask API की मदद से, सामान्य एचटीटीपी GET या POST अनुरोधों को बफ़र किया जाएगा. Cloud Tasks, इन एचटीटीपी अनुरोधों को एचटीटीपी टास्क में रैप करेगा. ऐसा, कतार की डिफ़ॉल्ट राउटिंग कॉन्फ़िगरेशन सेटिंग के साथ किया जाएगा.

सबसे पहले, ऐक्सेस टोकन पाने के लिए लॉगिन करें और कुछ वैरिएबल सेट करें:

gcloud auth application-default login
ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
PROJECT_ID=$(gcloud config get-value project)
TASKS_QUEUES_API="https://cloudtasks.googleapis.com/v2beta3/projects/$PROJECT_ID/locations/$LOCATION/queues"

एचटीटीपी टास्क बनाना

BufferTask API की मदद से, एचटीटीपी टास्क बनाएं. ध्यान दें कि यह एक सामान्य एचटीटीपी जीईटी अनुरोध है. इसके लिए, टास्क बनाने की ज़रूरत नहीं है:

curl -X GET "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

एचटीटीपी पोस्ट और बॉडी के साथ एक और एचटीटीपी टास्क बनाएं:

curl -X POST "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d "{'message': 'Hello World'}"

ज़रूरी नहीं: क्लाइंट लाइब्रेरी की मदद से, एचटीटीपी टास्क भी बनाया जा सकता है. उदाहरण के लिए, C# के इस सैंपल Program.cs को देखें. इसमें, एचटीटीपी जीईटी अनुरोध को सीधे BufferTask API पर भेजा जाता है. इसके लिए, इसे Task में रैप करने या Cloud Tasks के लिए क्लाइंट-लाइब्रेरी की ज़रूरत नहीं होती:

var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer";

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}");
    var response = await client.GetAsync(BufferTaskApiUrl);
    var content = await response.Content.ReadAsStringAsync();
    Console.WriteLine($"Response: {content}");
}

इसे इस तरह चलाया जा सकता है:

dotnet run $PROJECT_ID $LOCATION $QUEUE3 $ACCESS_TOKEN

BufferTask API, एचटीटीपी अनुरोधों से टास्क बनाने का काम करता है. साथ ही, यूआरआई के लिए, कतार की राउटिंग कॉन्फ़िगरेशन सेटिंग से यूआरएल जोड़ता है.

एचटीटीपी टास्क की जांच करना

सूची में मौजूद गाने फिर से चलाएं:

gcloud tasks queues resume $QUEUE3 --location=$LOCATION

आपको दिखेगा कि Cloud Run सेवा को Cloud Tasks से एचटीटीपी GET और POST अनुरोध मिले हैं:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 4
---
httpRequest:
  latency: 0.002279292s
  protocol: HTTP/1.1
  remoteIp: 35.243.23.42
  requestMethod: POST
  requestSize: '777'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5450'
  serverIp: 216.239.32.53
  status: 200
  userAgent: Google-Cloud-Tasks
...
httpRequest:
  latency: 0.228982142s
  protocol: HTTP/1.1
  remoteIp: 35.187.132.84
  requestMethod: GET
  requestSize: '426'
  requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/
  responseSize: '5510'
  serverIp: 216.239.34.53
  status: 200
  userAgent: Google-Cloud-Tasks

10. बधाई हो

बधाई हो, आपने कोडलैब पूरा कर लिया है!

इसके बाद, Pub/Sub और Cloud Run के बीच बफ़र के तौर पर Cloud Tasks का इस्तेमाल करना लेख पढ़ें. इससे आपको असल दुनिया का एक उदाहरण मिलेगा. इसमें बताया गया है कि Cloud Tasks की नई सुविधाएं, सेवाओं के बीच बफ़र क्यू आसानी से बनाने में कैसे मदद कर सकती हैं.

क्लीनअप (ज़रूरी नहीं)

शुल्क से बचने के लिए, संसाधनों को हटा दें.

अगर आपको प्रोजेक्ट की ज़रूरत नहीं है, तो उसे मिटा दें:

gcloud projects delete $PROJECT_ID

अगर आपको प्रोजेक्ट की ज़रूरत है, तो एक-एक करके संसाधनों को मिटाया जा सकता है.

Cloud Run की सेवाओं को मिटाएं:

gcloud run services delete $SERVICE1 --region $REGION
gcloud run services delete $SERVICE2 --region $REGION

Cloud Tasks की कतारें मिटाएं:

gcloud tasks queues delete $QUEUE1 --location=$LOCATION
gcloud tasks queues delete $QUEUE2 --location=$LOCATION
gcloud tasks queues delete $QUEUE3 --location=$LOCATION

हमने क्या-क्या शामिल किया है

  • एचटीटीपी टारगेट टास्क बनाने का तरीका.
  • नए क्यू-लेवल एचटीटीपी यूआरआई ओवरराइड की मदद से, एचटीटीपी टारगेट टास्क बनाने का तरीका.
  • नए क्यू-लेवल के एचटीटीपी यूआरआई ओवरराइड का इस्तेमाल करके, लंबित टास्क को कैसे बदला जाए.
  • BufferTask API की मदद से, एचटीटीपी अनुरोधों को आसानी से बफ़र करने का तरीका.