tusimo / laravel-delay-queue
trigger for later fire redis queue job when app shutdown
Installs: 7 072
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- illuminate/queue: ^5.2.0
- illuminate/support: ^5.2.0
Requires (Dev)
- phpunit/phpunit: ~5.7
This package is not auto-updated.
Last update: 2024-11-10 05:46:00 UTC
README
安装
- 修改composer.json
{ "require": { "tusimo/laravel-delay-queue": "dev-master" } }
- 修改config/app.php
<?php return [ 'providers' => [ /* * Package Service Providers... */ Tusimo\DelayedQueue\Provider\DelayedQueueServiceProvider::class, ] ];
- 修改config/queue.php.增加delay参数为true即可,其他connection也可使用delay
'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'retry_after' => 60, 'delay' => true ]
使用
当使用event异步处理,job时不会立即发送到后台处理 默认会在register_shutdown_function回调时发送所有队列任务和job.
如果在发生异常时,不希望触发后台处理,可以在以下地方将本次请求中所有产生的异步任务清空。
public function report(Exception $exception) { //清空已经保存的队列任务 DelayQueueContainer::flushQueueJobs(); //获取已保存的队列任务 DelayQueueContainer::getQueueJobs(); //立即将已保存的队列任务放入队列后台 DelayQueueContainer::fireQueueJobs() if ($this->shouldntReport($exception)) { return; } app(ErrorReporter::class)->report($exception); }
注意
默认CLI模式会在错误产生的时候自动删除已经发出的job保证只有在运行成功后才会触发job到队列。非CLI模式没有处理,需要自己在类似删除report函数里清空。
如果在错误发生时,也需要某个job进入队列执行,请手动在代码里运行 php DelayQueueContainer::fireQueueJobs();
,此时会立即将已保存的job发送到队里。