基于LaravelS Swoole实现异步任务队列
第一步:创建任务类
位置:/app/Jobs/TestTask.php
<?php
namespace App\Jobs;
use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Support\Facades\Log;
class TestTask extends Task
{
// 待处理任务数据
private $data;
// 任务处理结果
private $result;
public function __construct($data)
{
$this->data = $data;
}
// 处理任务的逻辑,运行在Task进程中
public function handle()
{
Log::info(__CLASS__ . ': 开始处理任务', [$this->data]);
sleep(2); // 模拟一些慢速的事件处理
$this->result = 'The result of ' . $this->data . ' hello swoole';
}
// 可选。任务完成时调用
public function finish()
{
Log::info(__CLASS__ . ': 任务处理完成', [$this->result]);
}
}
第二步:开启task_worker_num
位置:config/laravels.php
'swoole' => [
'task_worker_num' => env('LARAVELS_TASK_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() * 4 : 8),
]
第三步:投递任务
用户路由进行模拟
位置:routes/web.php
Route::get('/task/test', function () {
// 实例化TestTask并通过deliver投递,此操作是异步的,投递后立即返回,由Task进程继续处理TestTask中的handle逻辑
$task = new \App\Jobs\TestTask('测试异步任务');
$success = \Hhxsv5\LaravelS\Swoole\Task\Task::deliver($task);
var_dump($success);
});
第四步:开启LaravelS
php bin/laravels start
2021-03-18
请登录后再评论