在laravel 4.2中运行后台功能

问题描述 投票:0回答:1

我有一个功能,需要很长时间才能执行所以我想在后台运行此功能可以吗?

我想在用户点击按钮上运行此功能。并且不想从终端运行任何命令。

谢谢

artisan laravel-4.2
1个回答
0
投票

为了实现队列系统,需要遵循这些步骤。

- 按钮单击路径(/ usertask / performAction)在您的控制器中假设(UserTaskController.php)1-为您的作业添加命名空间。

<?php
use App\Jobs\ProcessTask; // job class that will be created later


class UserTaskController extends Controller
{


// controllers function
function performAction()
{
    ...
    ...
    ...

    // code to place background task
    $data =  [];
    $job  = ( new ProcessTask($userId, $data))->onQueue('ProcessTask');

    if ($this->dispatch($job)) {
        info('job dispatched');
    } else {
        info('job dispatch failed');
    }
    // code to place background task ends
}

现在创建一个作业文件。您的jobs文件夹中的(ProcessTask.php)。 ProcessTask.php

--------

<?php

namespace App\Jobs;

use Log;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class ProcessTask extends Job implements ShouldQueue
{

    use InteractsWithQueue,
        SerializesModels;

    /**
     * Create a new command instance.
     *
     * @return void
     */

    protected $userId;
    protected $data;


    public function __construct($userId, $data)
    {
        $this->userId = $userId;
        $this->data = $data;
    }

    /**
     * Execute the command.
     *
     * @return void
     */
    public function handle()
    {
        try {
            // perform your task
            /*
            $this->userId
            $this->data
            */
            return true;
        } catch (\Exception $e) {
            Log::error('ProcessTask:: Exception occured ');
            Log::error($e);
            $this->release(); //release the job back to queue, as attempts increase fail to be
            return false;
        }
    }


    public function failed()
    {
        Log::info('ProcessTask :: failed ends');
    }
}

?>

///现在你可以在终端()中运行你的工作

php arrtisan queue:listen --queue=ProcessTask --timeout=600 

在你的终端(或者你可以把它放在主管)

与队列驱动程序相关的设置

/var/www/html/infinito/config/queue.php

make QUEUE_DRIVER as database.

'default' => env('QUEUE_DRIVER', 'database'),
© www.soinside.com 2019 - 2024. All rights reserved.