fastD icon indicating copy to clipboard operation
fastD copied to clipboard

请问如何在控制器里面投递异步任务到task进程执行?

Open ronylee opened this issue 6 years ago • 2 comments

实现dotask, dofinish可以处理任务,但是不知道如何投递,能否支持投递到指定的task类处理呢

ronylee avatar Aug 14 '19 01:08 ronylee

` // 新建 HttpTaskServer class HttpTaskServer extends HTTPServer {

public function doTask(swoole_server $server, $data, $taskId, $workerId)
{
    $this->dispatchJob($data);
}

/**
 * @param $job
 */
protected function dispatchJob($job)
{
    try {
        $job->run();
    } catch (Throwable $exception) {
        if ($job instanceof TaskInterface) {
            dispatcher()->queue($job);
        }
        logger()->error($exception);
    }
}

}

// 新建投放task处理类

class TaskDispatcher {

public function task(TaskInterface $job)
{
    if (app()->has('server')) {
        server()->getSwoole()->task($job);
    } else {
        $this->queue($job);
    }
}

public function queue(TaskInterface $job)
{
    if ($job instanceof AbstractJob) {
        queue()->push($job);
    }
}

}

// 调度 app()->get(TaskDispatcher::class)->task( new NoticeAsync() );

`

viliy avatar Aug 14 '19 02:08 viliy

收到,谢谢!

ronylee avatar Aug 14 '19 02:08 ronylee