บัฟเฟอร์คำขอ HTTP ด้วย Cloud Tasks

1. บทนำ

c6ac6ed05292f13e.png

Cloud Tasks เป็นบริการจัดคิวที่มีการจัดการครบวงจรสำหรับการจัดการการดำเนินการ การเลือกจ่ายงาน และการส่งมอบงานจำนวนมาก

Cloud Tasks ช่วยให้คุณแยกชิ้นงานที่เรียกว่างาน ซึ่งสามารถดำเนินการได้อย่างอิสระ (เช่น งานเพื่ออัปเดตรายการฐานข้อมูล) นอกโฟลว์แอปพลิเคชันหลัก และส่งงานเหล่านั้นไปประมวลผลแบบไม่พร้อมกันโดยใช้ตัวแฮนเดิลที่คุณสร้างขึ้น

ระบบจะเพิ่มงานที่ส่งไปยังคิว ซึ่งจะเก็บงานไว้จนกว่าจะดำเนินการสำเร็จหรือล้มเหลว คิวสามารถทำหน้าที่เป็นตัวควบคุมโฟลว์การส่งได้ด้วย ทั้งนี้ขึ้นอยู่กับการกำหนดค่า คุณสร้างและกำหนดค่าคิว จากนั้นบริการ Cloud Tasks จะจัดการคิว เมื่อเพิ่มงานแล้ว คิวจะส่งงานและตรวจสอบว่าผู้ปฏิบัติงานประมวลผลงานได้อย่างน่าเชื่อถือ

d59ffe8d34138c88.png

ฟีเจอร์หลักบางส่วนของ Cloud Tasks มีดังนี้

  • เป้าหมาย HTTP: เพิ่มงานที่กำหนดเป้าหมายไปยังบริการ HTTP ที่ทำงานบน Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions หรือระบบในองค์กรอย่างปลอดภัยโดยใช้การตรวจสอบสิทธิ์ OAuth/OIDC มาตรฐานอุตสาหกรรม
  • การขจัดงานที่ซ้ำกัน: ระบบจะส่งงานที่เพิ่มหลายครั้งเพียงครั้งเดียว
  • การนำส่งที่รับประกัน: ระบบรับประกันว่าจะนำส่งงานอย่างน้อย 1 ครั้ง และงานส่วนใหญ่จะนำส่ง 1 ครั้ง
  • การควบคุมอัตราและการลองใหม่: ควบคุมการดำเนินการโดยตั้งค่าอัตราการจ่ายงาน จำนวนครั้งสูงสุดที่พยายาม และระยะเวลาขั้นต่ำที่จะรอระหว่างการพยายาม
  • การตั้งเวลางานในอนาคต: ควบคุมเวลาที่งานจะทำงาน

ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีสร้างและใช้คิว Cloud Tasks ปกติสำหรับงานเป้าหมาย HTTP ก่อน จากนั้น คุณจะได้เรียนรู้วิธีใช้การลบล้าง URI ของ HTTP ระดับคิวและ BufferTask API ใหม่เพื่อบัฟเฟอร์คำขอ HTTP ด้วย Cloud Tasks ได้ง่ายขึ้น

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างงานเป้าหมาย HTTP
  • วิธีสร้างงานเป้าหมาย HTTP ด้วยการลบล้าง URI ของ HTTP ระดับคิวใหม่
  • วิธีเปลี่ยนงานที่รอดำเนินการด้วยการลบล้าง HTTP URI ระดับคิวใหม่
  • วิธีบัฟเฟอร์คำขอ HTTP ได้ง่ายขึ้นด้วย BufferTask API ใหม่

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร

3. สร้างคิวปกติสำหรับงานเป้าหมาย HTTP

ในขั้นตอนแรกนี้ คุณจะได้เรียนรู้วิธีสร้างคิว Cloud Tasks ปกติและเพิ่มงาน HTTP ลงในคิวเพื่อกำหนดเป้าหมายบริการ Cloud Run

d4f09a342c8eab.png

งานเป้าหมาย HTTP คืออะไร

งานเป้าหมาย HTTP สามารถกำหนดเป้าหมายไปยังบริการ HTTP ใดก็ได้ที่ทำงานบน Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions หรือระบบในองค์กรได้อย่างปลอดภัยโดยใช้การตรวจสอบสิทธิ์ OAuth/OIDC มาตรฐานอุตสาหกรรม

ทำให้บริการ Cloud Run ใช้งานได้

ก่อนอื่น โปรดตรวจสอบว่าได้เปิดใช้ API ที่จำเป็นแล้ว

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

ทำให้บริการ Cloud Run ใช้งานได้ ซึ่งจะทำหน้าที่เป็นเป้าหมายของงาน HTTP

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

หยุดคิวชั่วคราวเพื่อให้คุณสังเกตงาน HTTP ขณะที่สร้างได้

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

4. สร้างและทดสอบงาน HTTP

ในขั้นตอนนี้ คุณจะสร้างงาน HTTP เพื่อกำหนดเป้าหมายคิวที่สร้างไว้ก่อนหน้านี้

สร้างงาน HTTP

คุณสร้างงาน HTTP ได้โดยใช้ gcloud ดังนี้

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

ไม่บังคับ: คุณยังสร้างงาน HTTP ด้วยไลบรารีของไคลเอ็นต์ได้ด้วย เช่น คุณสามารถดู Program.cs สำหรับตัวอย่าง C# ที่มีการห่อคำขอ HTTP ไว้ใน Task และ TaskRequest ก่อนที่จะส่งไปยัง Cloud Tasks ด้วย CloudTasksClient

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

ทดสอบงาน HTTP

ในขั้นตอนนี้ ระบบจะสร้างงาน แต่ยังไม่ได้ดำเนินการเนื่องจากคิวหยุดชั่วคราว คุณยืนยันได้โดยแสดงคิว ดังนี้

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 ได้รับคำขอ HTTP GET จาก 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 ที่มีการกำหนดค่าการกำหนดเส้นทางเพื่อเพิ่มการลบล้าง URI ของ HTTP โดยใช้ฟีเจอร์การกำหนดค่าการกำหนดเส้นทางของงานระดับคิว จากนั้นคุณจะเพิ่มงาน HTTP ลงในคิวเพื่อกำหนดเป้าหมายบริการ Cloud Run แรก และสังเกตว่าการกำหนดค่าการกำหนดเส้นทางจะลบล้าง URI เพื่อกำหนดเส้นทางงานไปยังบริการ Cloud Run ที่ 2

5d1ec61a933f77.png

การกำหนดค่าการกำหนดเส้นทางงานระดับคิวคืออะไร

การกำหนดค่าการกำหนดเส้นทางของงานระดับคิวจะเปลี่ยนการกำหนดเส้นทางของงาน HTTP สำหรับทั้งคิวสำหรับงานที่รอดำเนินการและงานใหม่ทั้งหมด ซึ่งช่วยให้สร้างงานได้ง่ายขึ้นเนื่องจากไม่จำเป็นต้องตั้งค่าเป้าหมาย HTTP ที่ระดับงาน และยังช่วยให้ผู้ให้บริการควบคุมได้มากขึ้นเนื่องจากสามารถตั้งค่าเป้าหมายของงานทั้งหมดในคิวได้ (เช่น กำหนดเส้นทางการรับส่งข้อมูลไปยังแบ็กเอนด์อื่นหากแบ็กเอนด์เดิมหยุดทำงาน)

คุณตั้งค่าต่อไปนี้ได้ที่ระดับคิว

  • ส่วนหัว: ส่วนหัวระดับคิวเมื่อระบุที่ระดับคิวจะอัปเดตส่วนหัวสำหรับงานทั้งหมดในคิว
  • เมธอด HTTP: เมธอด HTTP เมื่อระบุที่ระดับคิวจะลบล้างเมธอด HTTP สำหรับงานทั้งหมดในคิว
  • URI เป้าหมาย: คุณสามารถลบล้างโฮสต์ เส้นทาง การค้นหา พอร์ต รูปแบบ (HTTP หรือ HTTPS) ได้ทีละรายการ
  • การให้สิทธิ์: การกำหนดค่า OIDC/OAuth เมื่อระบุที่ระดับคิวจะลบล้างการกำหนดค่า OIDC/OAuth ระดับงาน

ทำให้บริการ Cloud Run ที่ 2 ใช้งานได้

ทําการติดตั้งใช้งานบริการ Cloud Run ที่ 2 ซึ่งจะทําหน้าที่เป็นเป้าหมายของการลบล้าง URI ของ HTTP ในภายหลัง

SERVICE2=hello2
REGION=us-central1

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

บันทึกโฮสต์ของ URL บริการไว้ใช้ในภายหลัง

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 ด้วยการกำหนดค่าการกำหนดเส้นทาง

สร้างคิวที่มีการกำหนดค่าการกำหนดเส้นทางพร้อมการลบล้าง URI ของ HTTP ไปยังบริการ Cloud Run ที่ 2

QUEUE2=http-queue-uri-override

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

โปรดทราบว่าการลบล้าง URI หมายถึงบริการ Cloud Run ที่ 2 งาน HTTP ที่เพิ่มลงในคิวจะมีการลบล้างโฮสต์ URI เดิม คุณดูการกำหนดค่าคิวได้โดยทำดังนี้

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

คุณควรเห็นว่า httpTarget มี uriOverride ที่ชี้ไปยังโฮสต์ของบริการที่ 2 ดังนี้

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

หยุดคิวชั่วคราวเพื่อให้คุณสังเกตงาน HTTP ขณะที่สร้างได้

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

6. สร้างและทดสอบงาน HTTP สำหรับคิวที่มีการกำหนดค่าการกำหนดเส้นทาง

ในขั้นตอนนี้ คุณจะสร้างงาน HTTP เพื่อกำหนดเป้าหมายบริการแรก และสังเกตว่าคิวจะลบล้าง URI ของบริการแรกเพื่อชี้ไปยังบริการที่สอง

สร้างงาน HTTP

สร้างงาน HTTP ด้วย URL ของบริการแรก

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

ทดสอบงาน HTTP

ทำให้คิวกลับมาทำงานอีกครั้ง

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

คุณควรเห็นว่าบริการ Cloud Run ที่ 2 (ไม่ใช่บริการแรก) ได้รับคำขอ HTTP GET จาก 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. เปลี่ยนงานที่รอดำเนินการด้วยการกำหนดค่าการกำหนดเส้นทาง

นอกจากนี้ คุณยังใช้การกำหนดค่าการกำหนดเส้นทางเพื่อเปลี่ยน URI ของ HTTP ของงานที่รอดำเนินการทั้งหมดในคิวได้ด้วย ซึ่งจะเป็นประโยชน์หากบริการแบ็กเอนด์หยุดทำงานและคุณต้องการกำหนดเส้นทางไปยังบริการอื่นอย่างรวดเร็ว มาดูวิธีการทำงานในขั้นตอนนี้กัน

วิธีหยุดคิวชั่วคราวอีกครั้ง

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

สร้างงาน HTTP โดยใช้ google.com เป็น URL ของงาน

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

งานอยู่ในสถานะรอดำเนินการเนื่องจากคิวหยุดชั่วคราว

ตอนนี้ ให้อัปเดตการลบล้าง URI ของ HTTP ให้ชี้ไปยังบริการแรก การดำเนินการนี้จะลบล้างโฮสต์ของงานที่รอดำเนินการจาก 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 แรกได้รับคำขอ HTTP GET จาก 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

โดยปกติแล้ว คุณจะสร้างงานโดยใช้ Tasks API จาก gcloud หรือไลบรารีของไคลเอ็นต์ Tasks ซึ่งทำให้แอปพลิเคชันต้องห่อหุ้มคำขอ HTTP เป็นงานโดยใช้ไลบรารีของไคลเอ็นต์ และยังสร้างการอ้างอิงระหว่างแอปพลิเคชันกับไลบรารีของไคลเอ็นต์ Tasks อีกด้วย

ในขั้นตอนนี้ คุณจะได้ดูวิธีใช้ประโยชน์จากการลบล้าง URI HTTP ระดับคิวและ BufferTask API ใหม่เพื่อสร้างงานเป้าหมาย HTTP ได้ง่ายขึ้นเพียงแค่ส่งคำขอ HTTP ตอนนี้แอปพลิเคชันที่ส่งคำขอ HTTP ได้จะสร้างงานเป้าหมาย HTTP ได้แล้ว

b1606516297fc4b6.png

BufferTask API คืออะไร

API CreateTask เป็นวิธีเก่าในการสร้างงาน และกำหนดให้ไคลเอ็นต์ส่งออบเจ็กต์งานไปยัง API โดยตั้งค่าช่องที่จำเป็นทั้งหมด

BufferTask API เป็นฟีเจอร์ใหม่ที่ช่วยให้ผู้ใช้สร้างงาน HTTP ได้โดยไม่ต้องระบุการกำหนดค่างาน (URL ของ HTTP, ส่วนหัว, การให้สิทธิ์) ซึ่งช่วยให้คุณส่งข้อความหรือเนื้อหาของคำขอไปยัง Buffer API ได้อย่างง่ายดาย

ซึ่งช่วยให้ผสานรวมกับบริการได้ง่ายขึ้น เนื่องจากตอนนี้สามารถติดตั้งใช้งาน Cloud Tasks ไว้หน้าบริการได้โดยไม่ต้องเปลี่ยนแปลงโค้ดใดๆ ในฝั่งไคลเอ็นต์ คำขอ HTTP ที่ส่งไปยัง BufferTask API จะได้รับการห่อหุ้มเป็นออบเจ็กต์ Task และส่งไปยังปลายทางที่ตั้งค่าไว้ที่ระดับคิว

หากต้องการใช้ BufferTask API คิวต้องมีการกำหนดค่า URI เป้าหมาย หรือกล่าวอีกนัยหนึ่งคือฟีเจอร์การกำหนดเส้นทางระดับคิวเป็นข้อกำหนดเบื้องต้นสำหรับการใช้ 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

หยุดคิวชั่วคราวเพื่อให้คุณสังเกตงาน HTTP ขณะที่สร้างได้

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

9. บัฟเฟอร์คำขอ HTTP ด้วย BufferTask API

ในขั้นตอนนี้ คุณจะบัฟเฟอร์คำขอ HTTP GET หรือ POST อย่างง่ายด้วย BufferTask API เบื้องหลัง Cloud Tasks จะรวมคำขอ HTTP เหล่านี้ไว้ในงาน HTTP โดยใช้การตั้งค่าการกำหนดเส้นทางเริ่มต้นของคิว

ก่อนอื่น ให้เข้าสู่ระบบเพื่อรับโทเค็นเพื่อการเข้าถึงและตั้งค่าตัวแปรบางอย่าง

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"

สร้างงาน HTTP

สร้างงาน HTTP ด้วย BufferTask API โปรดสังเกตว่าคำขอ HTTP GET นี้เป็นคำขอที่เรียบง่ายโดยไม่ต้องสร้างงาน

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

สร้างงาน HTTP อีกรายการด้วย HTTP POST และเนื้อหาดังนี้

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

ไม่บังคับ: คุณยังสร้างงาน HTTP ด้วยไลบรารีของไคลเอ็นต์ได้ด้วย ตัวอย่างเช่น คุณสามารถดู Program.cs สำหรับตัวอย่าง C# ที่มีการส่งคำขอ 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 จะดูแลการสร้างงานจากคำขอ HTTP และเพิ่ม URL จากการตั้งค่าการกำหนดเส้นทางของคิวสำหรับ URI

ทดสอบงาน HTTP

ทำให้คิวกลับมาทำงานอีกครั้ง

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

คุณควรเห็นว่าบริการ Cloud Run ได้รับคำขอ HTTP GET และ POST จาก Cloud Tasks ดังนี้

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. ขอแสดงความยินดี

ยินดีด้วย คุณทำ Codelab เสร็จแล้ว

คุณสามารถลองใช้ Cloud Tasks เป็นบัฟเฟอร์ระหว่าง Pub/Sub กับ Cloud Run เพื่อดูตัวอย่างการใช้งานจริงว่าฟีเจอร์ใหม่ของ 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

สิ่งที่เราได้พูดถึงไปแล้ว

  • วิธีสร้างงานเป้าหมาย HTTP
  • วิธีสร้างงานเป้าหมาย HTTP ด้วยการลบล้าง URI ของ HTTP ระดับคิวใหม่
  • วิธีเปลี่ยนงานที่รอดำเนินการด้วยการลบล้าง HTTP URI ระดับคิวใหม่
  • วิธีบัฟเฟอร์คำขอ HTTP ได้ง่ายขึ้นด้วย BufferTask API ใหม่