biigle/laravel-remote-queue
将作业提交到其他 Laravel 或 Lumen 实例,并从其他实例接收作业。
Requires
- guzzlehttp/guzzle: ~6.0
- illuminate/contracts: ^5.7 >=5.7.7 | ^6.0
- illuminate/queue: ^5.7 >=5.7.7 | ^6.0
- illuminate/routing: ^5.7 >=5.7.7 | ^6.0
- illuminate/support: ^5.7 >=5.7.7 | ^6.0
Requires (Dev)
- laravel/laravel: ^5.7 >=5.7.7 | ^6.0
- mockery/mockery: ^1.2
- phpunit/phpunit: ^8.0
README
将作业提交到其他 Laravel 或 Lumen 实例,并从其他实例接收作业。
安装
composer require biigle/laravel-remote-queue
Laravel
Laravel 会自动发现服务提供者。
Lumen
将 $app->register(Biigle\RemoteQueue\RemoteQueueServiceProvider::class);
添加到 bootstrap/app.php
。
使用
此包可用于将队列作业提交到另一个 Laravel 或 Lumen 应用,从另一个应用接收作业或两者都做。
接收作业
默认情况下,此包不允许接收来自另一个应用的作业。要允许接收,将配置文件中的 remote-queue.listen
设置为 true
。使用令牌来验证传入请求。在这种情况下,令牌只是一个长的随机字符串。使用 remote-queue.accept-tokens
配置接受所有令牌。所有成功验证的接收作业都将推送到此应用的“常规”队列并由队列工作进程处理。
重要:请确保作业类在提交和接收应用中都存在。
提交作业
推送到远程队列的作业将通过 HTTP 传输并在另一个应用中处理。要使用远程队列,请在配置文件中的 queue.connections
配置中使用 remote
驱动器。示例
[ 'driver' => 'remote', // Default queue of the remote host to push jobs to. 'queue' => 'default', // The remote queue API endpoint of the remote host. Don't forget the trailing slash! 'url' => 'http://192.168.100.100/api/v1/remote-queue/', // Token to use for authentication on the remote host. 'token' => 'IoO2l7UKZfso5zQloF2XvAShEbAR5a9M8u+WBfg0HgI=', // Optional additional request options for the GuzzleHttp client. 'request_options' => [], ]
现在,您可以将作业调度到远程队列连接,就像其他任何连接一样。
use App\Jobs\MyJob; MyJob::dispatch($data)->onConnection('remote');
提交/响应模式
我们开发了此包,以便能够在具有 GPU 的远程机器上处理作业。为了返回计算结果,我们应用了所谓的“提交/响应”模式。
在此模式中,此包安装在 Laravel/Lumen 实例(让我们称它们为 A 和 B)上。在实例 A 上,远程队列配置为将作业推送到实例 B(具有 GPU 的那个)。在实例 B 上,远程队列配置为将作业推送到实例 A。新的 GPU 作业从实例 A 提交到实例 B 上的远程队列。一旦计算结果,它们作为“响应作业”返回到实例 A 上的远程队列,在那里可以进一步处理结果。
配置
您可以直接或通过环境变量覆盖 remote-queue
配置中的任何这些选项。
remote-queue.listen
默认:false
环境:REMOTE_QUEUE_LISTEN
接受并处理发送到此应用实例的作业。
remote-queue.endpoint
默认:api/v1/remote-queue
环境:REMOTE_QUEUE_ENDPOINT
接收新工作的API端点。
远程队列连接
默认值: null
环境: REMOTE_QUEUE_CONNECTION
使用此队列连接来处理接收到的作业。如果为null
,则使用默认连接。
远程队列接受令牌
默认值: []
环境: REMOTE_QUEUE_ACCEPT_TOKENS
只有当作业提供这些令牌之一时才接受作业。如果使用环境变量,请指定以逗号分隔的令牌列表。生成令牌的一种方法如下: head -c 32 /dev/urandom | base64
。
远程队列接受IP
默认值: []
仅从白名单中的IP地址接受请求。留空以接受所有IP的作业。
远程队列接受作业
默认值: []
仅接受此白名单中的类名的作业。留空以接受所有作业类。