fleethunttech / laravel-google-cloud-tasks-queue
Requires
- ext-json: *
- firebase/php-jwt: ^5.2
- google/cloud-tasks: ^1.6
- phpseclib/phpseclib: ~2.0
Requires (Dev)
- mockery/mockery: ^1.2
- orchestra/testbench: ^3.5 || ^3.6 || ^3.7 || ^3.8 || ^4.0 || ^5.0
- symfony/console: ^4.4|^5.0
This package is not auto-updated.
Last update: 2024-10-03 21:53:01 UTC
README
简介
此包允许您将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
(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
服务账户角色
如果您不是使用主服务账户(它具有所有能力),则必须添加以下角色才能使其工作
- App Engine Viewer
- Cloud Tasks Enqueuer
- Cloud Tasks Viewer
- 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