基于LaravelS Swoole实现异步任务队列

作者: 温新

分类: 【高性能PHP】

阅读: 3214

时间: 2021-03-18 14:13:48

第一步:创建任务类

位置:/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

请登录后再评论