Laravel 5.5 Job Chaining: вызов неопределенного метода :: chain ()

У меня две работы, первая должна быть отправлена, вторая перед запуском, я узнал цепочку заданий, но не могу заставить ее работать, все задания настроены из коробки, поэтому теоретически это должно просто работать. Вот моя первая работа:

namespace App\Jobs;

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 App\Jobs;

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 App\Jobs\MCSendJob::chain(). Я нахожу этот метод в Illuminate\Foundation\Bus\PendingDispatch.

Не могу понять - где проблема.


person Oleg Shakhov    schedule 19.04.2018    source источник


Ответы (3)


Вам нужно использовать черту Queueable в обеих вакансиях

person BrandenB171    schedule 13.06.2018

У меня была такая же проблема, и это было как-то связано с ошибочной более ранней версией скрипта, загружаемой в память Horizon.

Быстрый перезапуск Horizon, и все снова работает нормально.

person garethwi    schedule 02.10.2019

У меня была такая же проблема, решилась перезапуском супервизора:

service supervisord stop
service supervisord force-reload
person soheil yo    schedule 16.06.2020