【问题标题】:Laravel 5.5 Queue Dispatch Not WorkingLaravel 5.5 队列调度不起作用
【发布时间】:2018-06-18 10:46:10
【问题描述】:

也许我不了解 Laravel 队列的工作原理,或者它本身不起作用,我对 Laravel Queue/Dispatch 的预期行为是,如果从 Controller 启动调度,则调度到队列的代码应该静默执行并在后台。最终用户浏览器不必等待代码执行。

这就是我的代码所发生的情况,调度到队列的代码在执行时让浏览器“旋转...”。

这是预期的行为吗?代码:

    **Controller:**

    public function make_eps_certs($tbl_eps)
    {
        //dd(Carbon::now()->addMinutes(10))
        Log::info('Dispatching maeEPSCert to Queue');
        $var_result=makeEPSCerts::dispatch($tbl_eps)->onQueue('eventadmin')
            ->delay(10);  
return redirect()->back();
}


    **Job:**

    namespace App\Jobs;

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

use App\partSubs;
use Log;

use Image;

class makeEPSCerts implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

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

    protected $passdata;
    public $timeout = 120;

    public function __construct($passdata)
    {
        Log::info('Constructing makeEPSCert');
        $this->passdata = $passdata;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

    try
        {
        Log::info('Beginning makeEPSCert');
        $tbl_eps=$this->passdata;
    .....

【问题讨论】:

    标签: laravel queue laravel-5.5 dispatch


    【解决方案1】:

    .env 中的LOG_DRIVER 更改为database 并使用php artisan queue:table 创建所需的迁移文件,然后执行php artisan migrate

    之后你只需要运行php artisan queue:work --queue="eventadmin"

    然后您将识别出预期的行为

    更详细的文档可以在这里找到:https://laravel.com/docs/5.5/queues

    【讨论】:

    • 谢谢,是的,效果很好。所以我的误解是你需要运行 php artisan queue:work --queue="eventadmin" 作为监听器才能让它工作。
    • 不想使用命令行怎么办?例如,在用户上传视频时在后台处理视频?
    • @codiiv 如果您不想使用命令行,它将无法工作,仅此而已。命令行仅用于创建队列工作者的实例,当您要启动新作业时由您决定
    • @Insax 看起来有办法。一旦我测试过,我会更新你,因为你实际上可以以编程方式运行 Artisan 命令laravel.com/docs/5.7/…
    【解决方案2】:

    您可以通过以下方式重试(我假设您在 Laravel 文档中做了说明,但有一天它不起作用):

    第 1 步:在您的数据库中删除表“作业”。

    第 2 步:在控制台中运行命令 'php artisan migrate' 以再次创建表 'jobs'。

    第 3 步:在控制台中运行命令 'php artisan queue:work'

    第 4 步:重试您的应用

    请注意,在 .env 文件中,您设置:

    QUEUE_CONNECTION=数据库

    QUEUE_DRIVER=数据库

    P/s:它对我有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多