บัฟเฟอร์คำขอ 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 ครั้ง และงานส่วนใหญ่จะส่งเพียงครั้งเดียว
  • การควบคุมอัตราและการลองใหม่: ควบคุมการดำเนินการโดยการตั้งค่าอัตราการจ่ายงาน จำนวนครั้งสูงสุด และระยะเวลาขั้นต่ำในการรอระหว่างการดำเนินการแต่ละครั้ง
  • การตั้งเวลาในอนาคต: ควบคุมเวลาที่จะทำงาน

ใน Codelab นี้ คุณจะได้ดูวิธีสร้างและใช้คิว Cloud Tasks ปกติสำหรับงานเป้าหมาย HTTP ก่อน จากนั้น คุณจะได้ดูวิธีใช้การลบล้าง HTTP URI ระดับคิวและ 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 ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

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

จากคอนโซล Google Cloud ให้คลิกไอคอน 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. สร้างคิวที่มีการกำหนดค่าการกำหนดเส้นทาง

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

5d1ec61a933f77.png

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

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

การกำหนดค่าต่อไปนี้สามารถตั้งค่าที่ระดับคิว

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

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

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

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

สร้างคิวที่มีการกำหนดค่าการกำหนดเส้นทางพร้อมการลบล้าง HTTP URI ไปยังบริการ 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. เปลี่ยนงานที่รอดำเนินการด้วยการกำหนดค่าการกำหนดเส้นทาง

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

หยุดคิวชั่วคราวอีกครั้งโดยทำดังนี้

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

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

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

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

b1606516297fc4b6.png

BufferTask API คืออะไร

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

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

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

หากต้องการใช้ 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 หรือต้องการไลบรารี Client-Library สำหรับ 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 ใหม่