首页 后端开发 php教程 使用PHP和Google Cloud Tasks实现异步任务和调度

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

Jun 25, 2023 pm 12:51 PM
php编程 google cloud tasks 异步任务实现

无论是在线应用程序还是离线处理任务,对于处理各种任务的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
登录后复制

在安装过程中,您需要遵循屏幕上的提示并输入您的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
登录后复制

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

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

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

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

<?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.');
}
登录后复制

该函数需要访问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"}'
登录后复制

使用以上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
登录后复制

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

<?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();
登录后复制

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

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

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

总结

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

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

以上是使用PHP和Google Cloud Tasks实现异步任务和调度的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP将行格式化为 CSV 并写入文件指针 PHP将行格式化为 CSV 并写入文件指针 Mar 22, 2024 am 09:00 AM

这篇文章将为大家详细讲解有关PHP将行格式化为CSV并写入文件指针,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。将行格式化为CSV并写入文件指针步骤1:打开文件指针$file=fopen("path/to/file.csv","w");步骤2:将行转换为CSV字符串使用fputcsv()函数将行转换为CSV字符串。该函数接受以下参数:$file:文件指针$fields:作为数组的CSV字段$delimiter:字段分隔符(可选)$enclosure:字段引号(

PHP改变当前的 umask PHP改变当前的 umask Mar 22, 2024 am 08:41 AM

这篇文章将为大家详细讲解有关PHP改变当前的umask,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP更改当前的umask概述umask是一个用于设置新创建的文件和目录的默认文件权限的php函数。它接受一个参数,这是一个八进制数字,表示要阻止的权限。例如,要阻止对新创建的文件进行写入权限,可以使用002。更改umask的方法有两种方法可以更改PHP中的当前umask:使用umask()函数:umask()函数直接更改当前umask。其语法为:intumas

PHP建立一个具有唯一文件名的文件 PHP建立一个具有唯一文件名的文件 Mar 21, 2024 am 11:22 AM

这篇文章将为大家详细讲解有关PHP建立一个具有唯一文件名的文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PHP中创建唯一文件名的文件简介在php中创建具有唯一文件名的文件对于组织和管理文件系统至关重要。唯一文件名确保不会覆盖现有文件,并便于查找和检索特定文件。本指南将介绍在PHP中生成唯一文件名的几种方法。方法1:使用uniqid()函数uniqid()函数生成一个基于当前时间和微秒的唯一字符串。此字符串可以作为文件名的基础。

PHP计算文件的 MD5 散列 PHP计算文件的 MD5 散列 Mar 21, 2024 pm 01:42 PM

这篇文章将为大家详细讲解有关PHP计算文件的MD5散列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP计算文件的MD5散列MD5(MessageDigest5)是一种单向加密算法,可将任意长度的消息转换为固定长度的128位哈希值。它广泛用于确保文件完整性、验证数据真实性和创建数字签名。在PHP中计算文件的MD5散列php提供了多种方法来计算文件的MD5散列:使用md5_file()函数md5_file()函数直接计算文件的MD5哈希值,返回一个32个字符的

PHP返回一个键值翻转后的数组 PHP返回一个键值翻转后的数组 Mar 21, 2024 pm 02:10 PM

这篇文章将为大家详细讲解有关PHP返回一个键值翻转后的数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP键值翻转数组键值翻转是一种对数组进行的操作,它将数组中的键和值进行交换,生成一个新的数组,其中原始键作为值,原始值作为键。实现方法在php中,可以通过以下方法对数组进行键值翻转:array_flip()函数:array_flip()函数专门用于键值翻转操作。它接收一个数组作为参数,并返回一个新的数组,其中键和值已交换。$original_array=[

PHP将文件截断到给定的长度 PHP将文件截断到给定的长度 Mar 21, 2024 am 11:42 AM

这篇文章将为大家详细讲解有关PHP将文件截断到给定的长度,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP文件截断简介php中的file_put_contents()函数可用于将文件截断到指定长度。截断是指删除文件末尾的部分内容,从而缩短文件长度。语法file_put_contents($filename,$data,SEEK_SET,$offset);$filename:要截断的文件路径。$data:要写入文件的空字符串。SEEK_SET:指定为文件开始处

PHP判断某个数组中是否存在指定的key PHP判断某个数组中是否存在指定的key Mar 21, 2024 pm 09:21 PM

这篇文章将为大家详细讲解有关PHP判断某个数组中是否存在指定的key,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP判断某个数组中是否存在指定的key:在php中,判断某个数组中是否存在指定的key的方法有多种:1.使用isset()函数:isset($array["key"])该函数返回布尔值,如果指定的key存在,则返回true,否则返回false。2.使用array_key_exists()函数:array_key_exists("key",$arr

PHP返回上一个 MySQL 操作中的错误信息的数字编码 PHP返回上一个 MySQL 操作中的错误信息的数字编码 Mar 22, 2024 pm 12:31 PM

这篇文章将为大家详细讲解有关PHP返回上一个Mysql操作中的错误信息的数字编码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用PHP返回MySQL错误信息数字编码引言在处理mysql查询时,可能会遇到错误。为了有效处理这些错误,了解错误信息数字编码至关重要。本文将指导您使用php获取Mysql错误信息数字编码。获取错误信息数字编码的方法1.mysqli_errno()mysqli_errno()函数返回当前MySQL连接的最近错误号码。语法如下:$erro

See all articles