lukewaite / laravel-queue-aws-batch
Laravel Queue for AWS Batch,允许用户将作业提交到Batch队列进行处理。
Requires
- aws/aws-sdk-php: ^3.20.6
- illuminate/support: >5.4
Requires (Dev)
- laravel/framework: >5.4
- mockery/mockery: ^0.9.6
- phpunit/phpunit: ~4.8
- scrutinizer/ocular: ^1.3
- squizlabs/php_codesniffer: ^2.8
README
支持版本
安装
请查看上面的表格以获取包版本信息,并相应地更改下面的版本。
使用 composer,运行
composer require lukewaite/laravel-queue-aws-batch ~2.0
用法
-
您的Laravel应用需要被容器化并推送到您选择的容器注册库。将
ENTRYPOINT设置为artisan。 -
在
config/queues.php配置文件的connections数组中添加一个新的队列
[
'batch' => [
'driver' => 'batch',
'table' => 'jobs',
'queue' => 'first-run-job-queue',
'jobDefinition' => 'my-job-definition',
'expire' => 60,
'region' => 'us-east-1'
]
]
此队列传输依赖于将其队列作业写入数据库队列。在此示例中,它将作业写入 jobs 表。您需要使用 artisan queue:table 来创建一个迁移以创建此表。
-
创建一个与
queue配置设置同名的 AWS Batch 作业队列。Batch 连接器将在此处将您的作业推入Batch。在此示例中,我的队列名称将是first-run-job-queue。 -
为每个定义的队列创建一个类似于以下的 AWS Batch 作业定义
{
"jobDefinitionName": "my-laravel-application",
"type": "container",
"parameters": {},
"retryStrategy": {
"attempts": 10
},
"containerProperties": {
"image": "<your docker image>",
"vcpus": 1,
"memory": 256,
"command": [
"queue:work-batch",
"Ref::jobId",
"--tries=3"
],
"volumes": [],
"environment": [],
"mountPoints": [],
"ulimits": []
}
}
在此处,您配置容器启动,运行 queue:work-batch 命令(假设 artisan 是您的入口点)并传递队列名称,first-run-job-queue 以及 Ref::jobId 参数,这是在 Batch 连接器创建作业时传递的。
如果提供了该参数,您需要配置一个具有比您运行的 tries 更多的 "尝试" 的重试策略。否则,如果作业失败,Batch 不会重试您的作业。Laravel 5.1 不会在超过尝试次数的作业失败后写入失败作业队列,直到 下一个 运行。较新版本将在同一运行中写入队列,因此此要求可以在以后放宽。
- 将服务提供程序添加到您的应用中
- 在
config/app.php中向providers数组添加:LukeWaite\LaravelQueueAwsBatch\BatchQueueServiceProvider::class
- 在
限制
延迟作业
AWS Batch 没有延迟作业的方法,作为我们的运行器,我们没有简单的解决方案。如果您需要延迟作业,那么在这个阶段,我的建议是使用常规的DB队列,并触发一个作业将其推入队列,该作业将在正确的时间触发批处理作业。