stackkit / laravel-google-cloud-tasks-queue
Requires
- php: ^8.1
- ext-json: *
- google/cloud-tasks: ^1.10
- phpseclib/phpseclib: ^3.0
- thecodingmachine/safe: ^1.0|^2.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/legacy-factories: ^1.3
- laravel/pint: ^1.13
- orchestra/testbench: ^8.0
- thecodingmachine/phpstan-safe-rule: ^1.2
- dev-master
- 4.x-dev
- v4.2.1
- v4.2.0
- v4.1.1
- v4.1.0
- v4.0.0
- v4.0.0-beta.2
- v4.0.0-beta.1
- 3.x-dev
- v3.7.0
- v3.7.0-beta.2
- v3.7.0-beta.1
- v3.6.6
- v3.6.5
- v3.6.4
- v3.6.3
- v3.6.2
- v3.6.1
- v3.6.0
- v3.5.2
- v3.5.1
- v3.5.0
- v3.4.1
- v3.4.1-rc1
- v3.4.0
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.3.0-beta1
- v3.2.1
- v3.2.0
- v3.1.4
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.0
- v3.0.0-beta3
- v3.0.0-beta2
- v3.0.0-beta1
- 2.x-dev
- v2.3.0
- v2.2.1
- v2.2.0
- v2.2.0-beta1
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.1.0-beta1
- v2.0.1
- v2.0.0
- 1.x-dev
- v1.0.0
- v1.0.0-alpha1
- dev-bugfix/report-errors
- dev-feature/custom-cloud-tasks-client-options
This package is auto-updated.
Last update: 2024-08-26 20:00:29 UTC
README
简介
此包允许使用 Google Cloud Tasks 作为队列驱动程序。
要求
此包需要 Laravel 10 或 11。
安装
使用 Composer 安装包
composer require stackkit/laravel-google-cloud-tasks-queue
发布服务提供程序
php artisan vendor:publish --provider=cloud-tasks
将新的队列连接添加到 config/queue.php
'cloudtasks' => [ 'driver' => 'cloudtasks', 'project' => env('CLOUD_TASKS_PROJECT', ''), 'location' => env('CLOUD_TASKS_LOCATION', ''), 'queue' => env('CLOUD_TASKS_QUEUE', 'default'), // Required when using AppEngine 'app_engine' => env('APP_ENGINE_TASK', false), 'app_engine_service' => env('APP_ENGINE_SERVICE', ''), // Required when not using AppEngine 'handler' => env('CLOUD_TASKS_HANDLER', ''), 'service_account_email' => env('CLOUD_TASKS_SERVICE_EMAIL', ''), 'backoff' => 0, ],
如果您正在使用用于分发和处理任务的独立服务,并且应用程序只分发作业而不应处理作业,您可以从 config/cloud-tasks.php
中禁用任务处理器
'disable_task_handler' => env('CLOUD_TASKS_DISABLE_TASK_HANDLER', false),
最后,将 QUEUE_CONNECTION
改为新定义的连接。
QUEUE_CONNECTION=cloudtasks
现在包已安装,下一步是设置正确的环境变量。
请查看下表以了解值的含义及其应设置的值。
如何使用
将头信息传递给任务
您可以通过在 CloudTasksQueue
类上使用 setTaskHeadersUsing
方法将头信息传递给任务。
use Stackkit\LaravelGoogleCloudTasksQueue\CloudTasksQueue; CloudTasksQueue::setTaskHeadersUsing(static fn() => [ 'X-My-Header' => 'My-Value', ]);
如有必要,当前正在分发的有效载荷也可用
use Stackkit\LaravelGoogleCloudTasksQueue\CloudTasksQueue; CloudTasksQueue::setTaskHeadersUsing(static fn(array $payload) => [ 'X-My-Header' => $payload['displayName'], ]);
配置任务处理器 URL
您可以通过在 CloudTasksQueue
类上使用 configureHandlerUrlUsing
方法为任务设置处理器 URL。
use Stackkit\LaravelGoogleCloudTasksQueue\CloudTasksQueue; CloudTasksQueue::configureHandlerUrlUsing(static fn() => 'https://example.com/my-url');
如有必要,当前正在分发的作业也可用
use Stackkit\LaravelGoogleCloudTasksQueue\CloudTasksQueue; CloudTasksQueue::configureHandlerUrlUsing(static fn(MyJob $job) => 'https://example.com/my-url/' . $job->something());
配置工作者选项
您可以通过在 CloudTasksQueue
类上使用 configureWorkerOptionsUsing
方法配置工作者选项。
use Stackkit\LaravelGoogleCloudTasksQueue\IncomingTask; CloudTasksQueue::configureWorkerOptionsUsing(function (IncomingTask $task) { $queueTries = [ 'high' => 5, 'low' => 1, ]; return new WorkerOptions(maxTries: $queueTries[$task->queue()] ?? 1); });
使用自定义凭证文件
修改(或添加)config/cloud-tasks.php
文件中的 client_options
键
'client_options' => [ 'credentials' => '/path/to/credentials.json', ]
修改 CloudTasksClient 选项
修改(或添加)config/cloud-tasks.php
文件中的 client_options
键
'client_options' => [ // custom options here ]
工作原理和差异
使用 Cloud Tasks 作为 Laravel 队列驱动程序与使用其他 Laravel 队列驱动程序(如 Redis)的基本原理不同。
通常 Laravel 队列有一个工作进程,使用 queue:work
/ queue:listen
命令监听传入的作业。对于 Cloud Tasks,情况并非如此。相反,Cloud Tasks 会向应用程序发出一个带有作业有效载荷的 HTTP 请求。不需要运行 queue:work/listen
命令。
注意事项
Cloud Tasks 有它自己的重试配置选项:最大尝试次数、重试持续时间、最小/最大回退和最大加倍。所有这些选项都被此包忽略。相反,您可以直接从 Laravel 配置最大尝试次数、重试持续时间和回退策略。
身份验证
设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量,指定凭证文件的路径。
更多信息:https://cloud.google.com/docs/authentication/production
如果您不是使用具有所有权限的主服务账户,则必须添加以下角色才能使其正常工作
- App Engine Viewer
- Cloud Tasks Enqueuer
- Cloud Tasks Viewer
- Cloud Tasks Task Deleter
- Service Account User
升级
阅读UPGRADING.MD了解如何更新版本。