异步化执行封装

/**
 * 异步化执行函数
 */
if (!function_exists('async_job')) {
    function async_job($callback) {
        dispatch(new AsyncJob(serialize(new SerializableClosure($callback))));
    }
}

执行demo:

async_job(function () use($input) {
                    exec("sudo timedatectl set-ntp no");
                    foreach ($input['ntp_hosts'] as $host) {
                        $result = exec("sudo ntpdate $host");
                        if ($result) {
                            break;
                        }
                    }
                    exec("sudo hwclock --systohc");
                });

job:

<?php
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

/**
 * hbl
 * 简单不复杂通用的job类,不用写多个job
 * @date 2023/09/19
 * Class AsyncJob
 * @package App\Jobs
 */
class AsyncJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $timeout = 30000; //最大超时时间
    private $callback;


    public function __construct($callback)
    {
        $this->callback = unserialize($callback);
    }

    /**
     * 执行视频转码任务
     * 把非mp4的视频,转成mp4
     *
     * @return void
     */
    public function handle()
    {
        logger('----------start-async-job---------------------');
        is_callable($this->callback) && call_user_func($this->callback);
        logger('----------end-async-job---------------------');
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
杭州PHP有好工作求推荐
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

还不如用个协程

7个月前 评论
sanders 7个月前
slowlyo

虽然但是... 人家本来就支持闭包队列的啊

队列《Laravel 8 中文文档》

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!