Laravel 5.5 作业链:调用未定义的方法 ::chain()



>我有两个工作,第一个需要在运行前调度第二个,我找到了工作链但无法使其工作,所有作业都是从盒子设置的,所以理论上它应该只是工作。这是我的第一份工作:

namespace AppJobs;
class MCSendJob
{
    use Dispatchable, InteractsWithQueue;
    public function handle(Config $config, MCReport $report)
    {
        if ($config->mcdb_status) {
            $report->setConnection('mcdb');
        } elseif ($config->rmcdb_status) {
            $report->setConnection('rmcdb');
        } else {
            $this->fail(new Exception('No active MCDB connection found!'));
        }
        $models = collect([
            'appoitments' => Appointment::sent(false)->get(),
            'questions' => Question::sent(false)->get(),
            'price-clarifications' => PriceClarification::sent(false)->get(),
        ])->flatten(1);
        foreach ($models as $model) {
            $report->fill((new MCResource($model))->resolve());
            $report->save();
            $model->update(['mc_sent' => true]);
        }
        Log::info('MCSend done.');
    }
}

第二个:

namespace AppJobs;
class MCCheckJob
{
    use Dispatchable, Queueable, MailerDriverMail;
    protected $dbConnection;
    public function __construct($dbConnection)
    {
        $this->dbConnection = $dbConnection;
    }
    public function handle(Config $config)
    {
        try {
            DB::connection($this->dbConnection)->getPdo();
            $config->{$this->dbConnection . '_status'} = true;
            $config->save();
            Log::info('MCCheck done.');
        } catch (PDOException $exception) {
            if ($this->dbConnection === 'mcdb') {
                Log::error('MCDB connection unavailable!');
                $config->mcdb_status = false;
                static::dispatch('rmcdb');
            } else {
                Log::error('RMCDB connection unavailable!');
                $config->rmcdb_status = false;
            }
            $config->save();
            Log::error('SQLSrv PDO Exception', ['error_code' => $exception->getErrorCode(), 'error_info' => $exception->getMessage()]);
            if(!empty($config->mailing_list_mc_reports)) {
                Mail::to($config->mailing_list_mc_reports)->send(new MCNoConnectionWarning($this->dbConnection));
            }
        }
    }
}

当我尝试使用链调度作业时,如下所示:MCSendJob::dispatch()->chain([new MCCheckJob('mcdb')]),或MCSendJob::withChain([new MCCheckJob('mcdb')])->dispatch();我得到下一个错误:Call to undefined method AppJobsMCSendJob::chain()。我在IlluminateFoundationBusPendingDispatch中找到了这些方法.

无法弄清楚 - 问题在哪里。

您需要在两个作业中使用可排队特征

我刚刚遇到了同样的问题,这与 Horizon 将脚本的早期版本错误加载到内存中有关。

快速重新启动地平线,一切再次正常。

有同样的问题,通过重新启动主管解决了:

service supervisord stop
service supervisord force-reload

最新更新