使用PHP和Google Cloud Tasks实现异步任务和调度

王林
Freigeben: 2023-06-25 12:52:02
Original
1298 Leute haben es durchsucht

无论是在线应用程序还是离线处理任务,对于处理各种任务的Web应用程序,异步任务处理和调度都是非常重要的。为了更好地管理任务,保持Web应用程序的可扩展性并提高应用程序的性能,我们必须依赖异步任务处理和调度。

Google Cloud Tasks是一个完全托管的服务,可以轻松地通过API调用执行定期任务和异步任务。本文将向您展示如何使用PHP和Google Cloud Tasks实现异步任务和调度。我们将学习如何设置Google Cloud Tasks以及如何使用任务队列。

在开始之前,我们需要安装Google云SDK,设置Google Cloud Tasks,并创建一个Google Cloud Project以使用该服务。

安装Google Cloud SDK

Google云SDK是一个命令行工具,通常用于管理和运行云资源。您可以使用以下命令来安装Google云SDK:

curl https://sdk.cloud.google.com | bash
Nach dem Login kopieren

在安装过程中,您需要遵循屏幕上的提示并输入您的Google帐户信息。

设置Google Cloud Tasks

接下来,我们需要设置Google Cloud Tasks。在Cloud Tasks中,任务由3个关键要素构成:任务队列,任务,执行程序。

任务队列是具有特定名称的资源,允许您放置新的任务。任务队列名称是全局唯一的。

任务是由您创建并将其添加到任务队列中的描述性对象。

执行程序是任务运行时调用的实际代码,通常位于您的Web应用程序中。

在本教程中,我们将使用以下值:

  • 项目ID:my-project-id
  • 任务队列ID:my-queue
  • Cloud函数URL:https://us-central1-my-project-id.cloudfunctions.net/processTask

现在,让我们快速设置Cloud Tasks。

  1. 首先,我们需要为Cloud Tasks启用任务API。在Cloud Console中,选择要从中配置Cloud Tasks的项目,然后转到API和服务>库。在搜索框中键入“Cloud Tasks API”,然后单击Cloud Tasks API以启用它。
  2. 接下来,我们需要创建任务队列。我们可以使用以下gcloud命令:
gcloud tasks queues create my-queue
Nach dem Login kopieren

此命令会创建一个名为my-queue的任务队列。如果您使用其他服务,例如App Engine或Cloud Functions,则可以将它们绑定到该队列以便于处理任务。

  1. 创建执行程序。在本教程中,我们将使用Cloud Functions作为执行程序。因此,我们需要创建一个Cloud函数。

在Cloud Console中,选择要从中配置Cloud Functions的项目,然后转到Cloud Functions。单击“创建函数”,并为新函数输入名称“processTask”。

我们将使用以下Cloud函数代码:

 '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.');
}
Nach dem Login kopieren

该函数需要访问Google Cloud Storage,因此,我们还需要授予它访问权限。在Cloud Console中,转到存储>浏览。接下来,单击“创建存储桶”,为新桶选择标准存储并键入名称“my-bucket”。

在桶选项卡中,单击“权限”。 选择“添加实体”,为服务添加程序“cloud-tasks@cloudtasks.googleapis.com”权限。在“选择角色”下的“角色”下拉列表中,选择“Cloud Tasks任务执行者”。

现在,Cloud函数已准备好使用任务共享代码。

  1. 创建任务。我们现在可以为任务队列创建任务。我们将使用以下gcloud命令:
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"}'
Nach dem Login kopieren

使用以上gcloud命令,我们将创建一个POST请求,采用JSON格式,“message”属性设置为“hello world”。此任务将被添加到my-queue队列中。

这就是获取Cloud Tasks的完整设置。

使用PHP加载Cloud Tasks

现在,我们已经为Cloud Tasks进行了设置,让我们使用PHP加载Cloud Tasks。Google提供了一个名为google/cloud-tasks的官方PHP包。您可以使用Composer安装它:

composer require google/cloud-tasks
Nach dem Login kopieren

现在,我们可以编写PHP代码以创建任务,并将其添加到任务队列中。让我们看一下以下示例:

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();
Nach dem Login kopieren

此代码将创建一个名为“my-queue”的任务队列。接下来,它将创建一个任务,并将其添加到队列中。任务包含POST请求的URL,HTTP方法和数据体。

任务还包含计划时间,使任务在10秒后执行。

最后,我们使用“createTask”方法,将任务添加到队列。

总结

本文向您展示了如何使用PHP和Google Cloud Tasks实现任务调度和异步任务处理。Cloud Tasks是一个完全托管的服务,可以轻松地调用执行定期任务和异步任务的API。我们设置了一个Cloud函数,创建了任务队列,并使用PHP将任务添加到队列中。

在实际应用程序中,可能会添加更复杂的功能和服务,并且可以根据需要添加更多的队列和任务。但是,这应该为您提供将Google Cloud Tasks集成到Web应用程序中的良好起点。

Das obige ist der detaillierte Inhalt von使用PHP和Google Cloud Tasks实现异步任务和调度. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!