I'm trying to use Laravel 5.7 jobs queue to make some insertions/updates in my database and i problably made something wrong because when the job is called its seems to be blocking my application, therefore, not running asynchronously. My code is in the following structure:
.env
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
queue.php
'default' => env('QUEUE_CONNECTION', 'sync'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
job_caller.php
method_name(){
InsereProspeccao::dispatch($path, $evento, $equipe)->onQueue('jobs');
retur some_msg_to_user;
}
job_name.php
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class InsereProspeccao implements ShouldQueue{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $path = '';
private $evento = '';
private $equipe = '';
public function __construct($path, $evento, $equipe){
$this->path = $path;
$this->evento = $evento;
$this->equipe = $equipe;
}
public function handle(){
//all program logic
//access DB for insert/update
}
}
Obs.: I'M READING THE DOCUMENTATION, BUT I CANT FIND WHAT'S GOING WRONG !
2 Answers 2
You are using QUEUE_CONNECTION=sync
which basically has synchronous behavior.
Please follow below steps :
Run
php artisan queue:table
which will create a migration forjobs
table autimaticallyRun
php artisan migrate
which will create the table by running migrationChange
QUEUE_CONNECTION=database
and as per default, it will automatically takejobs
table to manage the queues.Run
php artisan config:clear
to clear application configuration cache
That should be good to go. Check documentation for more help.
-
5The one important additional step is running the queue worker which is where most people seem to get a bit overwhelmed by.apokryfos– apokryfos2019年02月23日 08:11:51 +00:00Commented Feb 23, 2019 at 8:11
-
well, @apokryfos. this one is new to me. So, when i deploy my project to a server i have to access it and install supervisor ?Wall-E– Wall-E2019年02月24日 19:27:55 +00:00Commented Feb 24, 2019 at 19:27
-
1@Wally the queue worker is a background process so as a minimum you need to be able to run background processes on your server. Supervisor is optional but nice to use since it makes things easier.apokryfos– apokryfos2019年02月25日 10:00:59 +00:00Commented Feb 25, 2019 at 10:00
-
1
-
1You can also suffix the command with
&
so it runs in backgrund. likephp artisan queue:work &
Mihir Bhende– Mihir Bhende2019年02月25日 21:18:31 +00:00Commented Feb 25, 2019 at 21:18
Try this : QUEUE_CONNECTION=database
and it should be good to go.
You can also set up rabbitmq or other drivers, because their implementation is much more advanced and will be more production - ready. But database is a good start.
QUEUE_CONNECTION=sync
so your queue connection will be synchronous