Membuat tugas target HTTP secara terprogram

Handler Cloud Tasks dapat dijalankan di endpoint HTTP mana pun dengan alamat IP eksternal seperti GKE, Compute Engine, atau bahkan server web lokal. Tugas Anda dapat dieksekusi di salah satu layanan ini dengan cara yang andal dan dapat dikonfigurasi.

Dokumen ini menunjukkan cara membuat tugas target HTTP secara terprogram menggunakan library klien Cloud Tasks, dan menempatkannya di Cloud Tasks queue. Anda juga dapat membuat tugas target HTTP di konsol Google Cloud , menggunakan Google Cloud CLI, atau dengan mengirim permintaan langsung ke Cloud Tasks API. Untuk mengetahui informasi selengkapnya, lihat Membuat tugas.

Untuk tugas yang memiliki target HTTP (berbeda dengan target App Engine eksplisit, yang kurang umum), ada dua cara untuk membuat tugas:

  • Metode CreateTask: Anda harus membuat objek tugas secara eksplisit. Gunakan metode ini jika tugas dalam antrean Anda memiliki konfigurasi perutean yang berbeda. Dalam hal ini, Anda menentukan perutean di tingkat tugas dan tidak dapat menggunakan perutean tingkat antrean. Pendekatan ini menggunakan metode CreateTask.

  • Metode BufferTask: Gunakan metode ini jika antrean Anda disiapkan untuk melakukan buffering tugas di depan layanan. Antrean harus memiliki perutean tingkat antrean. Pendekatan ini menggunakan metode BufferTask.

Untuk mendapatkan panduan tentang cara memilih antara dua metode untuk membuat tugas HTTP, lihat Memilih metode pembuatan tugas.

Buat tugas menggunakan metode CreateTask

Bagian ini membahas cara membuat tugas dengan menyusun objek tugas. Anda menggunakan metode CreateTask.

Saat membuat tugas menggunakan metode CreateTask, Anda secara eksplisit membuat dan menentukan objek tugas. Anda harus menentukan layanan dan pengendali yang memproses tugas.

Secara opsional, Anda dapat meneruskan data khusus tugas ke pengendali. Anda juga dapat menyesuaikan konfigurasi untuk tugas, seperti menjadwalkan waktu pada masa mendatang saat tugas harus dijalankan atau membatasi frekuensi percobaan ulang tugas yang diinginkan jika gagal (lihat Konfigurasi lanjutan).

Contoh berikut memanggil metode CreateTask untuk membuat tugas menggunakan library klien Cloud Tasks.

C#


using Google.Cloud.Tasks.V2;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using System;

class CreateHttpTask
{
    public string CreateTask(
        string projectId = "YOUR-PROJECT-ID",
        string location = "us-central1",
        string queue = "my-queue",
        string url = "http://example.com/taskhandler",
        string payload = "Hello World!",
        int inSeconds = 0)
    {
        CloudTasksClient client = CloudTasksClient.Create();
        QueueName parent = new QueueName(projectId, location, queue);

        var response = client.CreateTask(new CreateTaskRequest
        {
            Parent = parent.ToString(),
            Task = new Task
            {
                HttpRequest = new HttpRequest
                {
                    HttpMethod = HttpMethod.Post,
                    Url = url,
                    Body = ByteString.CopyFromUtf8(payload)
                },
                ScheduleTime = Timestamp.FromDateTime(
                    DateTime.UtcNow.AddSeconds(inSeconds))
            }
        });

        Console.WriteLine($"Created Task {response.Name}");
        return response.Name;
    }
}

Go


// Command createHTTPtask constructs and adds a task to a Cloud Tasks Queue.
package main

import (
	"context"
	"fmt"

	cloudtasks "cloud.google.com/go/cloudtasks/apiv2"
	taskspb "cloud.google.com/go/cloudtasks/apiv2/cloudtaskspb"
)

// createHTTPTask creates a new task with a HTTP target then adds it to a Queue.
func createHTTPTask(projectID, locationID, queueID, url, message string) (*taskspb.Task, error) {

	// Create a new Cloud Tasks client instance.
	// See https://godoc.org/cloud.google.com/go/cloudtasks/apiv2
	ctx := context.Background()
	client, err := cloudtasks.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	// Build the Task queue path.
	queuePath := fmt.Sprintf("projects/%s/locations/%s/queues/%s", projectID, locationID, queueID)

	// Build the Task payload.
	// https://godoc.org/google.golang.org/genproto/googleapis/cloud/tasks/v2#CreateTaskRequest
	req := &taskspb.CreateTaskRequest{
		Parent: queuePath,
		Task: &taskspb.Task{
			// https://godoc.org/google.golang.org/genproto/googleapis/cloud/tasks/v2#HttpRequest
			MessageType: &taskspb.Task_HttpRequest{
				HttpRequest: &taskspb.HttpRequest{
					HttpMethod: taskspb.HttpMethod_POST,
					Url:        url,