Home >Backend Development >PHP Tutorial >Asynchronous tasks and scheduling using PHP and Google Cloud Tasks

Asynchronous tasks and scheduling using PHP and Google Cloud Tasks

王林
王林Original
2023-06-25 12:51:111409browse

Whether it is an online application or an offline processing task, asynchronous task processing and scheduling are very important for web applications that handle various tasks. In order to better manage tasks, keep web applications scalable, and improve application performance, we must rely on asynchronous task processing and scheduling.

Google Cloud Tasks is a fully managed service that makes it easy to perform periodic and asynchronous tasks through API calls. This article will show you how to implement asynchronous tasks and scheduling using PHP and Google Cloud Tasks. We'll learn how to set up Google Cloud Tasks and how to use task queues.

Before we begin, we need to install the Google Cloud SDK, set up Google Cloud Tasks, and create a Google Cloud Project to use the service.

Install Google Cloud SDK

Google Cloud SDK is a command line tool commonly used to manage and run cloud resources. You can use the following command to install the Google Cloud SDK:

curl https://sdk.cloud.google.com | bash

During the installation process, you need to follow the on-screen prompts and enter your Google account information.

Set up Google Cloud Tasks

Next, we need to set up Google Cloud Tasks. In Cloud Tasks, a task consists of three key elements: task queue, task, and executor.

A task queue is a resource with a specific name that allows you to place new tasks. Task queue names are globally unique.

A task is a descriptive object that you create and add to the task queue.

The executor is the actual code called when the task runs, usually located in your web application.

In this tutorial we will use the following values:

  • Project ID: my-project-id
  • Task Queue ID: my-queue
  • Cloud function URL: https://us-central1-my-project-id.cloudfunctions.net/processTask

Now, let’s quickly set up Cloud Tasks.

  1. First, we need to enable the task API for Cloud Tasks. In the Cloud Console, select the project from which you want to configure Cloud Tasks and go to APIs & Services > Libraries. Type "Cloud Tasks API" in the search box and click Cloud Tasks API to enable it.
  2. Next, we need to create a task queue. We can use the following gcloud command:
gcloud tasks queues create my-queue

This command will create a task queue named my-queue. If you use other services, such as App Engine or Cloud Functions, you can bind them to this queue to facilitate processing of tasks.

  1. Create an execution program. In this tutorial, we will use Cloud Functions as the executor. Therefore, we need to create a Cloud function.

In the Cloud Console, select the project from which you want to configure Cloud Functions and go to Cloud Functions. Click Create Function and enter the name "processTask" for the new function.

We will use the following Cloud function code:

<?php

use GoogleCloudStorageStorageClient;
use GoogleCloudLoggingLoggingClient;

function processTask($data, $context)
{
    $bucket = 'my-bucket';

    $logging = new LoggingClient(['projectId' => 'my-project-id']);
    $logger = $logging->psrLogger('my-logger');

    $logger->info('Starting task', ['data' => $data]);

    $storage = new StorageClient(['projectId' => 'my-project-id']);
    $bucket = $storage->bucket('my-bucket');

    // TODO: Process the task

    $logger->info('Task completed successfully.');
}

This function requires access to Google Cloud Storage, therefore, we also need to grant it access. In the Cloud Console, go to Storage > Browse. Next, click Create Bucket, select standard storage for the new bucket and type the name "my-bucket".

In the bucket tab, click "Permissions". Select "Add Entity" to add the program "cloud-tasks@cloudtasks.googleapis.com" permission to the service. Under Select a role, in the Role drop-down list, select Cloud Tasks Task Performer.

Now the Cloud Function is ready to use task sharing code.

  1. Create tasks. We can now create tasks for the task queue. We will use the following gcloud command:
gcloud tasks create-http-task 
    --queue=my-queue 
    --url=https://us-central1-my-project-id.cloudfunctions.net/processTask 
    --http-method=POST 
    --body='{"message":"hello world"}'

Using the above gcloud command, we will create a POST request in JSON format with the "message" attribute set to "hello world". This task will be added to the my-queue queue.

This is the complete setup for getting Cloud Tasks.

Loading Cloud Tasks using PHP

Now that we have the settings for Cloud Tasks, let’s load Cloud Tasks using PHP. Google provides an official PHP package called google/cloud-tasks. You can install it using Composer:

composer require google/cloud-tasks

Now we can write the PHP code to create the task and add it to the task queue. Let's look at the following example:

<?php

require_once __DIR__ . '/vendor/autoload.php';

use GoogleCloudTasksV2CloudTasksClient;
use GoogleCloudTasksV2HttpMethod;
use GoogleCloudTasksV2Queue;
use GoogleCloudTasksV2Task;
use GoogleProtobufDuration;

$projectId = 'my-project-id';
$location = 'us-central1';
$queueId = 'my-queue';

$cloudTasksClient = new CloudTasksClient();

$queueName = $cloudTasksClient->queueName($projectId, $location, $queueId);
$queue = new Queue();
$queue->setName($queueName);

$taskName = $cloudTasksClient->taskName($projectId, $location, $queueId, uniqid());
$task = new Task();
$task->setName($taskName);

$taskHttpReq = new GoogleCloudTasksV2HttpRequest();
$taskHttpReq->setUrl('https://us-central1-my-project-id.cloudfunctions.net/processTask');
$taskHttpReq->setHttpMethod(HttpMethod::POST);

$taskHttpReq->setBody(json_encode(['message' => 'hello world']));
$task->setHttpRequest($taskHttpReq);

$delay = new Duration();
$delay->setSeconds(10);
$task->setScheduleTime($delay);

$cloudTasksClient->createTask($queue, $task);

$cloudTasksClient->close();

This code will create a task queue named "my-queue". Next, it creates a task and adds it to the queue. The task contains the URL, HTTP method and data body of the POST request.

The task also contains a scheduled time so that the task will be executed after 10 seconds.

Finally, we use the "createTask" method to add the task to the queue.

Summary

This article shows you how to implement task scheduling and asynchronous task processing using PHP and Google Cloud Tasks. Cloud Tasks is a fully managed service that makes it easy to call APIs that perform periodic and asynchronous tasks. We set up a Cloud function, created a task queue, and added tasks to the queue using PHP.

In actual applications, more complex functions and services may be added, and more queues and tasks can be added as needed. However, this should give you a good starting point for integrating Google Cloud Tasks into your web application.

The above is the detailed content of Asynchronous tasks and scheduling using PHP and Google Cloud Tasks. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn