stackkit/laravel-google-cloud-tasks-queue


README

Build Status Latest Stable Version Downloads

配套包:云调度器云日志

简介

此包允许使用 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

如果您不是使用具有所有权限的主服务账户,则必须添加以下角色才能使其正常工作

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

升级

阅读UPGRADING.MD了解如何更新版本。