Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Собственно пытаюсь добвить 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());
}
}
Не в сети
А задание LoadChannelsJob выполняется?
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
сделал вот так нет(
(new LoadChannelsJob())->handle();
Не в сети
сделал вот так нет(
што ви сказаль? я нипанимайт.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Твой первый листинг был вроде ок. Проблема не в нём.
Но просто для общего развития инфа: ты можешь не использовать трейт 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.
Не в сети
ну и чтобы пример был полным:
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.
Не в сети
спасибо) надо было сделать так
QUEUE_CONNECTION=database
Не в сети
спасибо) надо было сделать такQUEUE_CONNECTION=database
вместо "спасибо" жми кнопку [↑] , лайки это единственный корм для помогающих
вот если бы ты НЕ написал вот это
Собственно пытаюсь добвить job в очередь но этого не происходит, driver=database
я бы тебе раньше посоветовал проверить нужный параметр.
Мало того, если бы ты ответил на мой первый вопрос:
А задание 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.
Не в сети
P.S. @proger_online, ты этой темой подтолкнул меня к написанию первой статьи на этом сайте:
Как начать работать с очередями в Laravel
Спасибо тебе за толчёк!
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1