Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 09.02.2020 12:03:40

Не добавляется job в очередь

Собственно пытаюсь добвить job в очередь но этого не происходит, driver=database
никаки ошибок не вылетает при выполнении этой команды.

<?php

namespace App\Console\Commands;

use App\Jobs\LoadChannelsJob;
use Illuminate\Console\Command;
use Illuminate\Foundation\Bus\DispatchesJobs;

class CheckChannels extends Command
{
    use DispatchesJobs;
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:check';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';


    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {

        $this->dispatch(new LoadChannelsJob());
    }
}

Не в сети

#2 09.02.2020 12:20:13

Re: Не добавляется job в очередь

А задание LoadChannelsJob выполняется?


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 09.02.2020 12:53:31

Re: Не добавляется job в очередь

сделал вот так нет(

 
(new LoadChannelsJob())->handle();

Не в сети

#4 09.02.2020 13:18:38

Re: Не добавляется job в очередь

сделал вот так нет(

што ви сказаль? я нипанимайт.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 09.02.2020 13:25:40

Re: Не добавляется job в очередь

Твой первый листинг был вроде ок. Проблема не в нём.

Но просто для общего развития инфа: ты можешь не использовать трейт DispatchesJobs в вызывающем классе, а вместо этого обратиться к функции-хелперу dispatch(). Вот пример работающей команды для отсылки тестового сообщения через очередь:

<?php

namespace App\Console\Commands;

use App\Jobs\SendEmailJob;
use Carbon\Carbon;
use Illuminate\Console\Command;

class EmailTrigger extends Command
{
    protected $signature = 'email:trigger';

    protected $description = 'Put test email job to queue';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $ts = microtime(true);
        $emailJob = (new SendEmailJob())->delay(Carbon::now()->addSeconds(3));
        dispatch($emailJob);
        $elapsed = microtime(true) - $ts;

        $this->info('Email have been put to queue at ' . date('H:i:s')
            . '. Time spent ' . sprintf('%.4f sec', $elapsed));
    }
}

В случае если в .env QUEUE_CONNECTION=sync оно шлет письмо сразу и тратит около 3 сек на это.
В случае если в .env QUEUE_CONNECTION=database оно ставит задание в очередь и тратит на это 0.05 сек на моей локалке

Изменено artoodetoo (09.02.2020 14:04:11)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#6 09.02.2020 13:28:59

Re: Не добавляется job в очередь

ну и чтобы пример был полным:
app/Jobs/SendEmailJob.php

<?php

namespace App\Jobs;

use App\Mail\SendMailable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;

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

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to('receiver@example.com')->send(new SendMailable());
    }
}

и app/Mail/SendMailable.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SendMailable extends Mailable
{
    use Queueable, SerializesModels;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('welcome');
    }
}

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#7 09.02.2020 13:43:20

Re: Не добавляется job в очередь

спасибо) надо было сделать так

QUEUE_CONNECTION=database

Не в сети

#8 09.02.2020 14:02:30

Re: Не добавляется job в очередь

proger_online пишет:

спасибо) надо было сделать такQUEUE_CONNECTION=database

вместо "спасибо" жми кнопку [↑] , лайки это единственный корм для помогающих smile

вот если бы ты НЕ написал вот это

proger_online пишет:

Собственно пытаюсь добвить job в очередь но этого не происходит, driver=database

я бы тебе раньше посоветовал проверить нужный параметр.
Мало того, если бы ты ответил на мой первый вопрос:

artoodetoo пишет:

А задание LoadChannelsJob выполняется?

типа "да, выполняется, но сразу, а не в очереди". Я бы догадался что дело в неправильной настройке.
Но ты сам мешал себе помогать. Будь внимательней и ошибок будет меньше.

Удачи!

Изменено artoodetoo (09.02.2020 14:03:18)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#9 09.02.2020 17:59:23

Re: Не добавляется job в очередь

P.S. @proger_online, ты этой темой подтолкнул меня к написанию первой статьи на этом сайте:
Как начать работать с очередями в Laravel
Спасибо тебе за толчёк! smile


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела