tomwalder/polyfill-appengine-google-cloud-tasks

允许简单的使用旧的Google App Engine原生PushTask和PushQueue在Cloud Run或其他使用Google Cloud Tasks API的环境下工作

v0.0.1 2020-10-26 14:40 UTC

This package is auto-updated.

Last update: 2024-08-26 23:12:09 UTC


README

我知道标题很炫。

如果您正在AppEngine PHP 5.5运行时执行此操作

use google\appengine\api\taskqueue\PushTask;
use google\appengine\api\taskqueue\PushQueue;

$task1 = new PushTask('/someUrl');
$task2 = new PushTask('/someOtherUrl');
$queue = new PushQueue();
$queue->addTasks([$task1, $task2]);

或者...

use google\appengine\api\taskqueue\PushTask;

$task1 = new PushTask('/someUrl');
$task1->add();

那么这个库将允许该代码在AppEngine之外工作,提供对新Google Cloud Tasks API的polyfill。

这是升级到PHP 7标准运行时灵活运行时——或者更好的是Cloud Run的垫脚石。

安装 & 设置

使用Composer引入库

composer require tomwalder/polyfill-appengine-google-cloud-tasks

您需要配置您的Cloud Tasks队列所在的(区域)。通常在启动代码中执行一次即可。

CloudTasksQueue::initLocation('europe-west2');

身份验证

您的应用程序需要凭证来调用Google Cloud Tasks API。这通常使用默认凭证,来自GCP实例等自动处理。

如果您需要手动指定路径,可以这样做...

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json');

或者,您可以按照以下方式配置并注入自己的Google\Cloud\Tasks\V2\CloudTasksClient。有关认证信息,请参阅Google客户端认证

$obj_client = new CloudTasksClient([
   'keyFilePath' => '/path/to/keyfile.json'
]);
CloudTasksQueue::initClient($obj_client);

绝对任务URL(Cloud Run)

如果您在Cloud Run或GCP实例(即AppEngine之外)上使用此库,HTTP推送任务URL不再相对。

因此,您需要设置基本HTTP目标——所有相对任务URL都将附加到该目标。

CloudTasksQueue::initHttpTarget('https://my-awesome-project-hvdgury43f-ew.a.run.app');

用法

基本上,您可以使用原始的Google PushTaskPushQueue类来做很多事情。请参阅上面的示例。

更多信息

批量添加

Google Cloud Tasks不支持批量添加,因此polyfill会逐个添加任务。

您可能会注意到一些延迟增加。在罕见的情况下,您可能会在任务入队过程中收到错误。这将导致一些任务被创建,但不是所有任务。

手动指定项目ID

您可以按照以下方式手动指定Google项目ID(我们尝试从凭证中提取)

CloudTasksQueue::initProject('my-awesome-project');

性能

强烈建议使用gRPCProtobuf扩展来从所有Google API中获得最佳性能。

默认为REST,除非上述可用。Google Auth堆栈自动检测。

这些扩展在Google App Engine PHP 7运行时中可用,并在php.ini中启用

强制队列

如果您想使用新的队列名称而不用担心自己创建队列,可以按照以下方式启用

CloudTasksQueue::ensureQueues(true);

这将检查在插入任务之前队列是否存在,并尝试创建它。

这可能会增加延迟,并且可能不适合生产环境使用。

外部链接

致谢

本代码的部分内容借鉴自:https://github.com/GoogleCloudPlatform/appengine-php-sdk