Laravel队列(不考虑驱动程序)仅在下一个作业排队后处理作业

Laravel队列(不考虑驱动程序)仅在下一个作业排队后处理作业,laravel,laravel-5,queue,Laravel,Laravel 5,Queue,答:我对Tinker docs的补丁现在已发布到正式的Laravel文档中,请参见此处的警告框: 昨天我注意到了一个非常奇怪的Laravel队列行为,队列总是等待下一个作业被调度以处理先前调度的作业。请帮我了解发生了什么事 $ laravel new test $ cd test $ php artisan make:job TestQueue 将以下内容粘贴到TestQueue类中。没什么特别的,真的: <?php namespace App\Jobs; use Illumin

答:我对Tinker docs的补丁现在已发布到正式的Laravel文档中,请参见此处的警告框:


昨天我注意到了一个非常奇怪的Laravel队列行为,队列总是等待下一个作业被调度以处理先前调度的作业。请帮我了解发生了什么事

$ laravel new test
$ cd test
$ php artisan make:job TestQueue
将以下内容粘贴到TestQueue类中。没什么特别的,真的:

<?php

namespace App\Jobs;

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

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

    public $id;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($id)
    {
        Log::info('Creating ' . $id);
        $this->id = $id;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('Running ' . $this->id);
    }
}
>App\Jobs\TestQueue::dispatch(2)

日志:

>App\Jobs\TestQueue::dispatch(3)

日志:

我相信,不仅队列(不管是哪个驱动程序)应该在队列就绪时拾取第一个作业并进行处理,而且同步驱动程序应该立即处理每个排队的作业(调用其
handle()
方法)

我觉得有人在试图证明我是1+1=3,而我就是看不出我做错了什么。我确信这不是框架中的一个bug,因为互联网会对此大肆渲染,事实并非如此

谢谢你抽出时间

Laravel框架5.7.12


编辑:本地环境,配置未被缓存

如评论中所述,我认为这只是使用tinker而不是web界面的产物。 我也可以用tinker复制它,但不能在web请求上下文中进行复制

我不知道为什么会发生这种情况,虽然tinker对调试非常有帮助,但它可能无法完全处理排队等操作


您可以向Laravel或直接向Laravel tinker项目提交一个bug,网址为

,我认为这只是使用tinker而不是web界面的产物。我也可以用tinker复制这一点,但在web请求中这样做时就不行了context@apokryfos哦,盖德,这太奇怪了,你说得对!非常感谢你。至少在redis的情况下。。。请验证同步驱动程序是否同时记录创建和运行?我也检查了sync,但仍然失败,但更糟糕的是。它只是不断地接受(创建x个日志)作业,但从未对它们调用
handle()
。编辑:忽略这一点,我将同步驱动程序配置为null(不确定这是默认的laravel模板还是我更改了它)。无论如何,请将您的评论粘贴为答案,@apokryfos:)。我将提交一个bug。@apokryfos我在上提交了一个bug。我们会看看那是不是报告此事的合适地点。请将您的评论作为答案发布,以便我可以接受。我知道这是旧的,但会留给其他人-我在tinker自述中的“分派作业”中记录了它,请参见此处:
[2018-10-30 22:38:01] local.INFO: Creating 1
[2018-10-30 22:38:04] local.INFO: Creating 2
[2018-10-30 22:38:06] local.INFO: Running 1
[2018-10-30 22:38:22] local.INFO: Creating 3
[2018-10-30 22:38:24] local.INFO: Running 2