Laravel Job - 没有为命令注册的处理程序

时间:2016-07-11 16:41:01

标签: laravel laravel-5.2

我尝试完成一个简单的工作,就像Laravel文档中的示例一样 - https://laravel.com/docs/5.2/queues#writing-job-classes - 但我收到此错误:"没有为命令[App \ Jobs \ SendReminderEmail]&#注册处理程序34。

我按照说明制作了jobs表甚至fail_jobs表,并且有完整的示例代码。

我保证handle()函数在那里,所以我不知道还有什么可以遗漏。

问候。

使用代码更新

首先我在Laravel示例中使用了该类,但之后我将其简化为:

<?php

namespace App\Jobs;

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

class SyncFromJson extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;

/**
 * Create a new job instance.
 *
 * @return void
 */
 public function __construct()
 {
     //
 }

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    //
    $var = "fooooo";
    \Log::info("job is running!!!", $var);
}
}

要调用作业,我在调度作业的控制器中创建了一个简单的方法:

$job = (new SyncFromJson())->delay(3);
$this->dispatch($job);

还试过这个: $this->dispatch(new SyncFromJson());

2 个答案:

答案 0 :(得分:7)

为了它的价值,我遇到了类似的问题并实施了“SelfHandling”。似乎解决了这个问题。

尝试更改此内容:

class SyncFromJson extends Job implements ShouldQueue

对此:

class SyncFromJson extends Job implements ShouldQueue, SelfHandling

答案 1 :(得分:2)

我遇到了完全相同的问题。在我的情况下,原来是应用程序配置中的错误提供程序是问题。我使用以前的项目作为我的新项目的框架并继承了Laravel集合总线包(这不是必需的。)当我删除集合总线包(laravelcollective / bus)时,运行composer update并替换

集体\总线\ BusServiceProvider ::类,

照亮\总线\ BusServiceProvider ::类,

一切顺利。这可能是一个类似的问题?