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.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 देखें. इसमें एचटीटीपी अनुरोध को CloudTasksClient के साथ Cloud Tasks पर भेजने से पहले, Task और TaskRequest में रैप किया गया है:

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 से एचटीटीपी GET अनुरोध मिला है:

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

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

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

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

  • हेडर: अगर क्यू-लेवल पर हेडर तय किए जाते हैं, तो क्यू-लेवल के हेडर, क्यू में मौजूद सभी टास्क के लिए हेडर को अपसर्ट करेंगे.
  • एचटीटीपी मेथड: अगर एचटीटीपी मेथड को क्यू-लेवल पर तय किया जाता है, तो यह क्यू में मौजूद सभी टास्क के लिए एचटीटीपी मेथड को बदल देगा.
  • टारगेट यूआरआई: होस्ट, पाथ, क्वेरी, पोर्ट, और स्कीम (एचटीटीपी या एचटीटीपीएस) को अलग-अलग तौर पर बदला जा सकता है.
  • अनुमति: अगर OIDC/OAuth कॉन्फ़िगरेशन को टास्क के बजाय क्यू-लेवल पर सेट किया जाता है, तो यह टास्क-लेवल के OIDC/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 से एचटीटीपी GET अनुरोध मिला है. ऐसा इसलिए हुआ, क्योंकि आपने अनुरोध को बदल दिया था:

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 से एचटीटीपी GET अनुरोध मिला है. ऐसा ओवरराइड की वजह से हुआ है (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 की मदद से, एचटीटीपी टास्क बनाएं. ध्यान दें कि यह एक सामान्य एचटीटीपी GET अनुरोध है. इसके लिए, टास्क बनाने की ज़रूरत नहीं है:

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 देखें. इसमें, HTTP GET अनुरोध को सीधे 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 की नई सुविधा का इस्तेमाल करके, एचटीटीपी अनुरोधों को आसानी से बफ़र करने का तरीका.