fleethunttech/laravel-google-cloud-tasks-queue

v2.1.4 2021-12-01 11:22 UTC

README

Build Status Latest Stable Version License

简介

此包允许您将Google Cloud Tasks用作队列驱动程序。

工作原理

将Cloud Tasks用作Laravel队列驱动程序与其他Laravel队列驱动程序(如Redis)的基本原理不同。

通常,Laravel队列有一个监听传入任务的worker,使用queue:work / queue:listen命令。使用Cloud Tasks,情况并非如此。相反,Cloud Tasks将为您调度任务,并通过HTTP请求将任务有效负载发送到您的应用程序。无需运行queue:work/listen命令。

有关如何配置Cloud Tasks队列的更多信息,请阅读下一节配置队列

此包使用HTTP请求处理器,不支持AppEngine。但请随时贡献!

要求

此包需要Laravel 5.6或更高版本。

请查看下表以了解支持的Laravel和PHP版本

安装

(1) 使用Composer要求该包

composer require stackkit/laravel-google-cloud-tasks-queue

官方文档 - 创建Cloud Tasks队列

(2) 将新的队列连接添加到config/queue.php

'cloudtasks' => [
    'driver' => 'cloudtasks',
    'project' => env('STACKKIT_CLOUD_TASKS_PROJECT', ''),
    'location' => env('STACKKIT_CLOUD_TASKS_LOCATION', ''),
    'handler' => env('STACKKIT_CLOUD_TASKS_HANDLER', ''),
    'queue' => env('STACKKIT_CLOUD_TASKS_QUEUE', 'default'),
    'service_account_email' => env('STACKKIT_CLOUD_TASKS_SERVICE_EMAIL', ''),
],

(3) 更新QUEUE_CONNECTION环境变量

QUEUE_CONNECTION=cloudtasks

(4) [仅限Laravel ^8.0及以上] 在config/queue.php中配置失败的任务以使用database-uuids驱动程序

'failed' => [
    'database' => env('DB_CONNECTION', 'mysql'),
    'table' => 'failed_jobs',
    'driver' => 'database-uuids',
],

(5) 使用gcloud创建一个新的Cloud Tasks队列

gcloud tasks queues create [QUEUE_ID]

安装包后,最后一步是设置正确的环境变量。

请查看下表以了解值的意义及其应是什么。

身份验证

GOOGLE_APPLICATION_CREDENTIALS环境变量设置为凭据文件的路径。

更多信息: https://cloud.google.com/docs/authentication/production

服务账户角色

如果您不是使用主服务账户(它具有所有能力),则必须添加以下角色才能使其工作

  1. App Engine Viewer
  2. Cloud Tasks Enqueuer
  3. Cloud Tasks Viewer
  4. Service Account User

配置队列

当您首次使用gcloud tasks queues create创建队列时,默认设置将类似于以下内容

rateLimits:
  maxBurstSize: 100
  maxConcurrentDispatches: 1000
  maxDispatchesPerSecond: 500.0
retryConfig:
  maxAttempts: 100
  maxBackoff: 3600s
  maxDoublings: 16
  minBackoff: 0.100s

可配置设置

maxBurstSize

最大爆发大小限制在队列中有许多任务且速率很高时队列中任务的处理速度。

maxConcurrentDispatches

Cloud Tasks允许为此队列派发并发任务的最大数量

maxDispatchesPerSecond

从该队列派发任务的最大速率

maxAttempts

每个任务的重试次数。Cloud Tasks将尝试任务最多max_attempts次(即,如果第一次尝试失败,则将有max_attempts - 1次重试)。必须是 >= -1。

maxBackoff

任务失败后,将在min_backoff和max_backoff持续时间之间调度任务进行重试

maxDoublings

重试间隔将在max_doublings次翻倍。

任务的重试间隔从min_backoff开始,然后翻倍max_doublings次,然后线性增加,最后以max_backoff间隔重试,最多重试max_attempts次。

例如,如果min_backoff为10秒,max_backoff为300秒,max_doublings为3,那么任务将首先在10秒后重试。重试间隔将翻倍三次,然后以2^3 * 10秒的线性方式增加。最后,任务将每隔max_backoff重试,直到任务已尝试max_attempts次。因此,请求将在10秒、20秒、40秒、80秒、160秒、240秒、300秒、300秒、......等间隔重试。

Laravel推荐的设置

为了模拟单个queue:work/queue:listen进程,只需将maxConcurrentDispatches设置为1

gcloud tasks queues update [QUEUE_ID] --max-concurrent-dispatches=1

有关配置队列的更多信息

https://cloud.google.com/tasks/docs/configuring-queues

安全性

作业处理程序需要每个请求都有一个OpenID令牌。在安装步骤中我们设置了服务账户邮箱,使用该服务账户,Cloud Tasks将生成一个OpenID令牌并将其与作业有效载荷一起发送到处理程序。

此包会验证令牌是由Google数字签名的。只有Google Tasks才能调用您的处理程序。

有关OpenID Connect的更多信息

https://developers.google.com/identity/protocols/oauth2/openid-connect